我目前正在阅读关于微服务的大量资料,但仍然不理解其中的一些部分。我画了以下图:
每个微服务都有两个访问方式:- REST:用于http使用
- gRPC:用于内部/后台通信/交换
如果我想登录,只需向我的身份验证服务发送Http请求即可。但是如果我想访问需要您已经连接的Stuff服务呢?
假设用户想要显示数据库STUFF中可用的内容,则Stuff服务将首先通过与身份验证服务进行交换来检查已连接用户的“令牌”是否正确,然后返回物品或“需要登录请求”。
所以我不明白的是,如果每个需要已连接客户端的服务都需要与身份验证进行交换,那么它将创建巨大的互联网流量以检查每个用户请求...所以我考虑为每个服务制作一个身份验证服务,但由于我应该只有一个数据库,因此会减缓流量的是数据库吗?
另外,如果我理解正确,每个微服务都应该在单独的服务器上,而不是同一个服务器上?
我希望我表达清楚了,如果需要更多细节,请不要犹豫!
谢谢!
Max
编辑1
根据@notionquest的答案:
所以它应该更像那样,对吗? 此外,根据Peter的评论,每个服务都可以实现自己的中间件(如JWT),因此API网关只是一个“透传器”。然而,我认为每个服务在每次内部交换时都要进行令牌检查,这对我来说可能不是一件好事。 对于物品,它很容易,因为它只检查一次令牌。现在,假设用户得到了物品,他选择了一个并想要购买它。然后,“购买服务”将调用物品服务以验证该项目的价格,但是...它将不得不检查用户令牌,因为物品是“受身份验证访问”的,这意味着“购买”服务和“物品”服务都要检查令牌,这增加了额外的检查。 我考虑过服务之间的内部保证访问,但这值得吗? 也许你说要为每个服务实现中间件,因为它们具有REST访问,但API网关会破坏拥有REST访问的想法。