gRPC客户端重新连接Kubernetes

时间:2016-09-01 16:56:38

标签: grpc

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

当pod重新启动时,主机名未更改,但我们无法保证IP地址保持不变。那么gRPC客户端仍然能够检测到要重新连接的新服务器吗?

2 个答案:

答案 0 :(得分:4)

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

此过程在您的应用程序执行任何操作时自然发生,但在重新建立连接之前可能会遇到RPC故障。启用"等待准备好"在RPC上会降低RPC在转换期间失败的可能性,尽管这样的RPC通常意味着你不关心响应延迟。

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

答案 1 :(得分:1)

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