我使用gRPC与Python作为客户端/服务器内kubernetes荚... 我想能够启动相同类型(gRPC服务器)的多个荚并让客户端连接到他们(随机)。gRPC客户端负载平衡
我派发了10个服务器,并设置了一个“服务”来定位它们。然后,在客户端,我连接到服务的DNS名称 - 这意味着kubernetes应该执行负载平衡并将我指向随机服务器吊舱。 实际上,客户端调用gRPC函数(这很好用),但是当我查看日志时,我发现所有调用都转到同一个服务器pod。
我认为客户端正在做某种DNS缓存,导致所有的呼叫被发送到同一台服务器。是这样吗?是否有禁用它,并设置相同的存根客户端进行“新”呼叫,并通过每个电话通过DNS获取新的IP?
我知道如果每次都会查询DNS服务器,可能会导致开销,但分配负载对我来说现在更重要。
编辑
可能不是一个缓存的问题...可能只是GRPC的工作方式。 HTTP/2和持久的可重用连接。任何方式在每次通话后“断开”?
谢谢你的详细解答。其实,我已经做了,你有什么建议和创建为每个请求(效率不高,我知道)的新渠道。从你的答案我明白,只有在DNS第一个IP会得到请求,直到它停止(没有可用的连接/死亡/坠毁),只有那么客户端将获得第二个IP等等......是吗? – Idan
是的。直到变化使人们有可能首先作为LB政策选择代替挑循环赛,如提及。 –
是否有扩大多台gRPC服务器的典型解决方案?或客户端负载平衡? –