【发布时间】:2019-06-18 00:52:55
【问题描述】:
对于 Grpc 服务客户端使用负载平衡。
频道创建
ManageChannelBuilder.forTarget("host1:port,host2:port,host3:port").nameResolverFactory(new CustomNameResolverProvider()).loadBalancerFactory(RoundRobinBalancerFactory.getInstance()).usePlaintText(true).build();
使用此通道创建存根。
问题
如果服务 [host1] 中的一个发生故障,那么存根是否会处理这种情况并且不会向服务 [host1] 发送任何进一步的请求?
根据https://grpc.io/blog/loadbalancing 的文档
胖客户端方法意味着负载平衡智能 在客户端实现。客户负责跟踪 可用服务器的数量、它们的工作负载以及用于 选择服务器。客户端通常集成库 与其他基础设施通信,例如服务发现、名称 解决方案、配额管理等。
那么 ManagedChannel 类是否有责任维护活动服务器列表或应用程序代码需要维护活动服务器列表并每次使用活动服务器列表创建 ManagedChannel 实例?
测试结果
根据测试,如果其中一项服务出现故障,则对负载平衡没有影响,并且所有请求都得到了正确处理。
那么是否可以假设存根或 ManagedChannel 类处理活动服务器列表?
非常感谢您提供文档回答。
【问题讨论】:
-
在哪里可以找到类 MulipleHostsNameResolverProvider
-
它是自定义类,感谢您的指出..将类的名称更改为 CustomNameResolverProvider
标签: java load-balancing grpc