【问题标题】:how to load balance gRPC java client requests over NLB如何通过 NLB 对 gRPC java 客户端请求进行负载平衡
【发布时间】: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 一起工作,但仍然不知道它是如何工作的。

标签: java grpc nlb


【解决方案1】:

NLB 无法正确平衡 grpc。这是一种低效的 hack。

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

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2022-01-28
    • 2019-02-02
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多