如何通过NLB负载均衡gRPC Java客户端请求

时间:2019-04-15 16:49:16

标签: java grpc nlb

我正在通过AWS NLB负载平衡将gRPC Java客户端测试到其服务器,但是所有流量都到达了同一节点。我试图了解它如何在NLB上工作。

由于gRPC使用持久TCP连接,我假设其客户端将通过NLB与服务器建立多个tcp连接,并随机地向这些连接提供请求?

我正在使用grpc.java示例中的代码

ManagedChannel channel = ManagedChannelBuilder.forAddress(endPoint, port).usePlaintext().build();
GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc.newBlockingStub(channel);
response = blockingStub.sayHello(request);

我看到一些文档说ManagedChannel封装了连接池的复杂性,我想它将维护连接并决定使用哪个连接?

既然存根是线程安全的,我想我可以对所有请求重用同一个存根吗?

所以问题是我如何使请求跨每个服务器节点实现负载均衡。我在NLB上运行了该示例,但是所有请求都碰到了同一个节点而没有运气。

1 个答案:

答案 0 :(得分:0)

NLB无法正确平衡GRPC的负载。这是一种效率低下的技巧。

grpc为受信任的客户端提供了胖客户端负载平衡解决方案。 https://github.com/grpc/grpc/blob/master/doc/load-balancing.md