【发布时间】:2018-09-24 22:49:35
【问题描述】:
我目前正在阅读很多有关微服务的内容,但我仍然不了解某些部分。我做了以下画:
每个微服务有 2 次访问:
- REST:用于 http
- gRPC:用于内部/后台通信/交换
如果我想登录,我可以向我的身份验证服务发送一个 Http 请求。但是,如果我想访问需要您已经连接的 Stuff 服务呢?
假设用户想要显示数据库 STUFF 中可用的东西,服务 Stuff 将首先检查连接用户的“令牌”是否正确,通过与身份验证服务交换,然后返回这些东西或“登录需要请求”。
所以我不明白的是,如果需要已连接客户端的每个服务都需要与身份验证进行交换,那么它将创建巨大的互联网流量以检查每个用户请求.. 所以我想每个服务一个身份验证服务,但既然我应该只有一个数据库,那么是数据库会减慢流量?
另外,如果我理解的话,每个微服务应该在不同的服务器上,而不是同一个服务器上?
我希望我清楚,不要犹豫,询问更多细节!
提前致谢:)
最大
编辑 1
基于@notionquest 的回答:
所以应该更像这样吧?
此外,根据 Peter 的评论,每个服务都可以实现自己的中间件(如前所述的 JWT),因此 API 网关只是“传递”。但是,我觉得这对我来说不是一件好事,因为每个服务都会对每个内部交易所进行令牌检查,不是吗?
对于这些东西,这很容易,因为它只检查 1 次令牌。现在,假设用户拿到东西后,他选择了一个并想购买它。然后“购买服务”将调用 stuff 服务以验证商品的价格,但是......它必须检查用户令牌,因为东西是“经过身份验证的访问”,所以这意味着“购买" 服务和 "Stuff" 服务都检查令牌,这增加了一个额外的检查。
我虽然关于服务之间的内部保证访问但值得吗?
另外,也许您说要为每个服务实现中间件,因为它们具有 REST 访问权限,但 API 网关只会破坏拥有 REST 访问权限的想法
【问题讨论】:
-
不要低估单个 authz/authn 服务可以处理多少。实际上,它只是通过主键查找单个数据库行。一个流行的替代方案是 JWT。但在你跳上微服务火车之前,请注意它们解决了组织问题,但会产生技术问题——很多。不要因为它很现代而这样做。
-
感谢您的回答!我不这样做是因为它是现代的,我有一个真正的需求:) 我读过 JWT 并且我已经在 Monolith 方法中使用了它,但是我仍然必须共享在每个服务之间进行 JWT 检查的服务。我只是担心互联网流量交换,我不希望获得太多请求的服务会减慢其他服务:/
-
JWT 经过专门的加密签名,因此您不必与任何人签到。它们是自包含的证明。
-
@Peter 根据您的回答和概念的小更新
标签: microservices grpc