【问题标题】:gRPC client reconnect inside KubernetesgRPC 客户端在 Kubernetes 内重新连接
【发布时间】:2017-01-09 15:57:09
【问题描述】:

如果我们在 Kubernetes pod 中定义我们的微服务,如果服务 pod 正在重新启动,我们是否需要检测 gRPC 客户端重新连接?

Pod 重启时主机名不会改变,但我们不能保证 IP 地址保持不变。那么 gRPC 客户端是否仍然能够检测到要重新连接的新服务器?

【问题讨论】:

    标签: grpc


    【解决方案1】:

    当 TCP 连接断开时(因为旧的 pod 停止了)gRPC 的通道将尝试使用指数退避重新连接。每次重新连接尝试都意味着解析 DNS 地址,尽管由于旧 DNS 条目的 TTL(生存时间),它可能不会立即检测到新地址。另外,我相信一些实现会在检测到失败时而不是在尝试之前解决地址。

    此过程自然发生,您的应用程序无需执行任何操作,尽管在重新建立连接之前它可能会遇到 RPC 失败。在 RPC 上启用“等待就绪”将减少 RPC 在此转换期间失败的机会,尽管这样的 RPC 通常意味着您不关心响应延迟。

    如果 DNS 地址没有(最终)重新解析,那么这将是一个错误,您应该提出问题。

    【讨论】:

      【解决方案2】:

      您需要如here 所述的客户端负载平衡。您可以使用 Kubernetes api 观察服务的端点。我为 Go 编程语言创建了一个包,它位于 github。抱歉,我还没有写文档。基本概念是一开始就获取服务端点,而不是观察服务端点的变化。

      【讨论】:

      • 请提及您的链接中描述的内容,因为仅链接的答案是不受欢迎的。答案应该能够在不依赖外部资源的情况下存在。
      猜你喜欢
      • 2021-09-27
      • 2020-09-05
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2017-05-25
      • 2017-12-24
      相关资源
      最近更新 更多