【发布时间】:2019-04-15 16:49:16
【问题描述】:
我正在通过 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 上运行了该示例,但所有请求都命中了同一个节点,但没有成功。
【问题讨论】:
-
刚从 grpc 找到 lb 博客。 grpc.io/blog/loadbalancing。所以看起来客户端 lb 需要额外的实现。看到很多文章声称 grpc 可以和 NLB 一起工作,但仍然不知道它是如何工作的。