首页 > 解决方案 > 关于系统架构的建议

问题描述

我对系统架构有一些疑问。我正在建立一个票务系统。基本上,它正在创建支持票。

我试图弄清楚我是否以正确的方式使用了这些组件。

在第一种情况下:

在此处输入图像描述

客户端请求创建新票,网关将请求转发给票务服务,票务服务想要检查令牌是否有效,因此通过带有令牌的 nats 抛出一个发布,如果令牌有效,则身份验证服务注册令牌和带有密钥的信息-值对到 Redis 一段时间让我们说 30 分钟。并将结果发布给 nats。Nats 将结果重定向到票务服务。如果一切正常,票务服务会在数据库中创建一条记录。

第二种情况是:

在此处输入图像描述

用户再次执行上述所有步骤,但是,身份验证方面,而不是要求身份验证服务从 Redis 获取信息(如果存在)并再次执行相同的步骤。

以下是我的问题,

你认为 Redis 用于正确的目的吗?还是我应该删除它并在请求进行身份验证时一遍又一遍地询问?

你认为我应该在网关上做所有的身份验证吗?

所以看起来这与上述问题有关。

在初始登录和请求时。(第一种情况)

在此处输入图像描述

登录后,(第二种情况)

在此处输入图像描述

我非常感谢您的建议、批评和评论。

先感谢您。

标签: serviceredisarchitecturemicroservices

解决方案


更正确的方法是从 API 网关进行身份验证,即。API 网关使用身份验证服务进行身份验证,如建议的两种解决方案的第二个选项中所述。

API 网关应该被证明是您所有请求的“网关”,并过滤任何未经身份验证或授权访问您的服务的请求。在这种情况下,身份验证和授权可以是它们自己的服务,API 网关将使用该服务来确定请求是否可以访问任何其他下游服务。除此之外,它还通过删除 NATS 消除了复杂性。少一个组件来操作和管理总是一个胜利。

我要做的一个小改动是,在第二步中,不是 API 网关直接连接到 Redis,而是让身份验证服务检查 Redis。也就是说,认证服务会先去Redis,然后再去数据库。这样一来,脱钩就更多了。

API 网关不需要知道身份验证服务如何将令牌的密钥存储在 Redis 中。因此,如果您决定更改密钥在身份验证服务中的应有方式,则无需针对 API 网关中从 Redis 读取密钥的方式有效地部署新的更改。


推荐阅读