[英]Java gRPC Custom Client-side load balancing
我使用 gRPC 编写了一个 Java 应用程序。 正如我查看文档: https://github.com/grpc/grpc/blob/master/doc/load-balancing.md
并在博客中: https://grpc.io/blog/grpc-load-balancing
有一些可用的 gRPC 应用程序级客户端负载均衡器:
它们都不符合我的需要。 我需要实现一个自定义。 问题是我找不到怎么做——不是在文档中,也不是在谷歌搜索/stackoverflow中。
在 App 中,每台服务器都服务于几个租户。 当创建新租户并且达到每台服务器的租户最大限制时 - 需要启动新服务器。
我在这里看到两个我需要解决的问题:
在 grpc-java 中,您可以实现自定义io.grpc.LoadBalancer
。 它控制创建哪些子通道(与服务器的连接),并为每个请求选择使用哪个子通道。 他们是先进的,没有例子。 有文档,但您可能需要查看RoundRobinLoadBalancer 实现。
要引导单个请求,客户端应用程序可以将租户 ID 附加为元数据(带有拦截器)或使用自定义 CallOptions,它们在 stub 上可用。 然后在您的LoadBalancer.Picker
中,您将从LoadBalancer.pickSubchannelArgs
读取该 ID。
通常使用NameResolver发现地址,但在您的情况下,LoadBalancer 直接调用任何远程服务来查找地址可能更合适。 这实际上是在 grpclb 中所做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.