kubernetes - 如何在分布式系统中维护套接字或通信通道
问题描述
我是分布式系统的新手,曾经需要将 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 中查找它并将包转发给它,以便它通过现有的流连接进一步转发给客户端。你指引我走向正确的方向,
谢谢你。
解决方案
另一个想法,你可以使用 Envoy 代理。
如果您使用 GKE,这些帖子很有帮助。
推荐阅读
- sql - postgreSQL 将列值作为新列并添加
- sap-cloud-sdk - 覆盖 JsonDeserializer 行为
- graphql - 如何验证是否应该执行下一个查询?
- javascript - 使用 Lodash 查找对象数组中新添加的元素
- python - 熊猫使用列表转换多列的数据类型
- python - Python 读取 100 多个 CSV 文件并将每个 CSV 文件中的列总和返回到新的 csv 中
- python - 访问 SQLite DB /w python 并获取格式错误的 DB
- javascript - 机器人找不到我的一个公会成员
- google-chrome - 断字连字符如何与复制粘贴一起使用(在 LaTeX / PDF 中)
- python - 如何在python字符串格式中仅添加不带括号的列表值