我是分布式系统的新手,曾经需要将gRPC服务部署到kubernetes(GKE)时遇到此问题。据我所知,当客户端启动rpc时,它会创建一个持久的http2连接,并在其上多路复用更多的调用。我喜欢通过此连接向客户端发送/推送通知或类似消息。如果我部署到多个Pod,则连接分布在它们之间,并且不确定在通道上注册到客户端的实例的最佳定位方法是什么。一种可能的解决方案是,一旦用户启动连接,就在集中服务中保留对clientId和pod ip(或某些标识)的引用,而其他pod查找该pod并将消息转发给它。是类似的建议还是现有的解决方案?我不熟悉这个领域,任何建议都将受到高度赞赏。
编辑:(响应@ mebius99)
在查看部署选项时,我偶然发现了GKE,由于使用gRPC / http2,其他云部署选项受到限制。感谢您提及服务发现,并且可以选择服务网格。使用gRPC,客户端可以维持与单个pod的长期连接。因此,我希望每个Pod都能够基于唯一的clientId(客户端可以进行初始注册rpc调用)进行查询,它连接了哪个Pod,因此可以利用此连接以及Pod在之间转发消息的方式他们。因此,就像当我从客户端收到注册呼叫时一样,我会更新有关客户端和Pod ip的中央注册表,然后从任何Pod中查找它并将包转发给它,以便它通过现有的流连接进一步转发给客户端。您引导我朝着正确的方向前进,
谢谢。
我建议从Kubernetes服务的概念和服务发现开始。在外部HTTP(S)负载平衡应该满足您的需求。
如果您需要更复杂的功能,可以使用Envoy代理+网络负载平衡作为解决方案,如此处所述。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句