我正在使用grpc (netty)进行客户机-服务器通信。目前,我正在使用NettyChannelBuilder创建一个单独的通道(我相信它是由一个http2连接支持的),并且我使用这个通道来创建我的所有http2存根。由于RPS相当高,我看到了grpc通道的饱和,并且请求开始排队。我想要创建更多的渠道(因此自然更多的连接)。有办法做到这一点吗?
此外,我是否假设一个grpc通道是由单个http2连接支持的?
发布于 2021-07-05 02:28:06
我认为你应该让客户端通道的线程池更大一些。
通道可以有多个子信道,子信道具有一个或多个传输,传输表示连接。服务器地址通常只有一个连接。
ManagedChannelBuilder.forAddress("127.0.0.1", 9091)
.executor(Executors.newCachedThreadPool())
.usePlaintext()
.build()发布于 2021-07-08 05:18:36
gRPC信道由一个或多个子信道支持;每个子信道是一个连接.当您有多个服务器(后端)时,拥有更多的连接会有所帮助,因此每个连接都会转到不同的后端。如果您有一个服务器(后端),您应该确保创建到同一台服务器的多个连接实际上会有所帮助,如果服务器不是瓶颈,并且能够处理高的网络吞吐量,这将是一种情况。
在一个通道中创建多个子通道是使用一个RoundRobinLoadBalancer和一个名为EquivalentAddressGroup的东西进行的。要为同一台服务器创建多个子通道,您必须能够为同一服务器创建多个EquivalentAddressGroup。要做到这一点,需要一个自定义NameResolver (或DnsNameResolver)。
https://stackoverflow.com/questions/68229848
复制相似问题