gRPC客户端重新连接Kubernetes

问题描述 投票:0回答:2

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

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

grpc
2个回答
4
投票

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.