【发布时间】:2021-11-23 03:21:41
【问题描述】:
我们正在生产环境中运行一个设置,其中 grpc 客户端通过中间的代理与服务器通信(附图片)
客户端用java写,服务端用go写。我们在客户端使用负载平衡属性作为round_robin。尽管如此,我们还是观察到了一些奇怪的行为。当我们的代理服务器缩小,即从假设 4 减少到 3,然后解析器开始行动,来自我们客户端的请求负载平均分配给我们所有的代理,但是当代理服务器扩大,即从 4 增加到 8,那么新的代理服务器不会收到来自客户端的任何请求,这会导致我们的代理服务器上的请求负载分布不均。有什么配置可以避免这种情况吗?
我们尝试在 JVM ARGS 中将名为 networkaddress.cache.ttl 的属性设置为 60 秒,但即使这样也无济于事。
【问题讨论】:
-
客户端如何知道使用代理?大部分等效:这是 L4 代理还是 HTTP CONNECT“客户端”代理?
-
@EricAnderson 这是一个 L7 代理,即 Kong。
-
在这种情况下,客户端只能看到代理的 IP。 round_robin 将在代理之间循环。扩大/缩小服务对客户端没有影响。也许您打算在客户端使用 pick_first 并在代理中使用循环?
-
@EricAnderson 是的,客户端只能看到代理 IP。我说的是代理盒向外扩展的情况。应该用新的代理盒建立连接吧?
-
哦,对不起。 gRPC 客户端在连接关闭时刷新 DNS。因此,您可以偶尔从代理循环连接。您使用的是哪个代理?理想情况下会有一个像 gRPC 的 MAX_CONNECTION_AGE 这样的选项。
标签: java grpc channel grpc-java