首页 > 解决方案 > 如何在分布式系统中维护套接字或通信通道

问题描述

我是分布式系统的新手,曾经需要将 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 中查找它并将包转发给它,以便它通过现有的流连接进一步转发给客户端。你指引我走向正确的方向,

谢谢你。

标签: kubernetesgoogle-kubernetes-enginegrpcdistributed-computingdistributed-system

解决方案


另一个想法,你可以使用 Envoy 代理。
如果您使用 GKE,这些帖子很有帮助。


推荐阅读