Grpc-java多通道管理

问题描述 投票:0回答:2

我使用 grpc-java (netty) 进行客户端-服务器通信。目前,我正在使用 NettyChannelBuilder 创建单个通道(我相信它由单个 http2 连接支持),并使用该通道创建所有 GRPC 存根。 由于 RPS 相当高,我看到 grpc 通道饱和并且请求开始排队。我想创建更多渠道(因此自然会有更多连接)。有办法实现吗?

此外,我假设 grpc 通道由单个 http2 连接支持?

java netty grpc http2
2个回答
2
投票

我认为你应该让客户端通道的线程池更大。

通道可以有多个子通道,一个子通道可以有一个或多个传输,一个传输代表一个连接。并且一个服务器地址通常有一个连接。

 ManagedChannelBuilder.forAddress("127.0.0.1", 9091)
                      .executor(Executors.newCachedThreadPool())
                      .usePlaintext()
                      .build()

0
投票

一个 gRPC 通道由一个或多个子通道支持;每个子通道都是一个连接。当您有多个服务器(后端)时,拥有更多连接会有所帮助,因此每个连接都会进入不同的后端。如果您有一台服务器(后端),您应该确保创建到同一服务器的多个连接实际上会有所帮助,如果该服务器不是瓶颈并且能够处理高网络吞吐量,则情况就是如此。

在通道中创建多个子通道是使用 RoundRobinLoadBalancer 和称为 EquivalentAddressGroup 的东西进行的。要为同一服务器创建多个子通道,您必须能够为同一服务器创建多个

EquivalentAddressGroup
。需要自定义 NameResolver(或 DnsNameResolver)来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.