首页 文章

GRPC客户端重新连接kubenetes

提问于
浏览
0

我们在kubenetes Pods中定义我们的微服务,如果服务pod重新启动,我们是否需要检测Grpc客户端重新连接?当pod重新启动时,主机名不会更改,但我们无法保证IP地址保持不变 . 那么grpc客户端仍然能够检测到要重新连接的新服务器吗?

2 回答

  • 1

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

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

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

  • 4

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

相关问题