【发布时间】:2017-01-09 15:57:09
【问题描述】:
如果我们在 Kubernetes pod 中定义我们的微服务,如果服务 pod 正在重新启动,我们是否需要检测 gRPC 客户端重新连接?
Pod 重启时主机名不会改变,但我们不能保证 IP 地址保持不变。那么 gRPC 客户端是否仍然能够检测到要重新连接的新服务器?
【问题讨论】:
标签: grpc
如果我们在 Kubernetes pod 中定义我们的微服务,如果服务 pod 正在重新启动,我们是否需要检测 gRPC 客户端重新连接?
Pod 重启时主机名不会改变,但我们不能保证 IP 地址保持不变。那么 gRPC 客户端是否仍然能够检测到要重新连接的新服务器?
【问题讨论】:
标签: grpc
当 TCP 连接断开时(因为旧的 pod 停止了)gRPC 的通道将尝试使用指数退避重新连接。每次重新连接尝试都意味着解析 DNS 地址,尽管由于旧 DNS 条目的 TTL(生存时间),它可能不会立即检测到新地址。另外,我相信一些实现会在检测到失败时而不是在尝试之前解决地址。
此过程自然发生,您的应用程序无需执行任何操作,尽管在重新建立连接之前它可能会遇到 RPC 失败。在 RPC 上启用“等待就绪”将减少 RPC 在此转换期间失败的机会,尽管这样的 RPC 通常意味着您不关心响应延迟。
如果 DNS 地址没有(最终)重新解析,那么这将是一个错误,您应该提出问题。
【讨论】: