grpc-java多渠道管理
Grpc-java multiple channel management
我正在使用 grpc-java (netty) 进行客户端-服务器通信。目前,我正在使用 NettyChannelBuilder 创建单个通道(我相信它由单个 http2 连接支持)并且我使用该通道创建我所有的 GRPC 存根。
由于 RPS 相当高,我看到 grpc 通道饱和并且请求开始排队。我想创建更多频道(因此自然会有更多连接)。有办法实现吗?
此外,我是否假设 grpc 通道由单个 http2 连接支持?
我认为你应该让客户端通道的线程池更大一些。
通道可以有多个子通道,一个子通道有一个或多个transport,一个transport代表一个connection。一个服务器地址通常有一个连接。
ManagedChannelBuilder.forAddress("127.0.0.1", 9091)
.executor(Executors.newCachedThreadPool())
.usePlaintext()
.build()
一个 gRPC 通道由一个或多个子通道支持;每个子通道都是一个连接。当您有多个服务器(后端)时,拥有更多连接会有所帮助,因此每个连接都会转到不同的后端。如果您只有一台服务器(后端),您应该确保创建到同一台服务器的多个连接实际上会有所帮助,如果服务器不是瓶颈并且能够处理高网络吞吐量。
需要使用 RoundRobinLoadBalancer and something called EquivalentAddressGroup. To create multiple sub-channels to the same server you have to be able to create multiple EquivalentAddressGroup
s for the same server. A custom NameResolver (or DnsNameResolver) 在一个频道中创建多个子频道。
我正在使用 grpc-java (netty) 进行客户端-服务器通信。目前,我正在使用 NettyChannelBuilder 创建单个通道(我相信它由单个 http2 连接支持)并且我使用该通道创建我所有的 GRPC 存根。 由于 RPS 相当高,我看到 grpc 通道饱和并且请求开始排队。我想创建更多频道(因此自然会有更多连接)。有办法实现吗?
此外,我是否假设 grpc 通道由单个 http2 连接支持?
我认为你应该让客户端通道的线程池更大一些。
通道可以有多个子通道,一个子通道有一个或多个transport,一个transport代表一个connection。一个服务器地址通常有一个连接。
ManagedChannelBuilder.forAddress("127.0.0.1", 9091)
.executor(Executors.newCachedThreadPool())
.usePlaintext()
.build()
一个 gRPC 通道由一个或多个子通道支持;每个子通道都是一个连接。当您有多个服务器(后端)时,拥有更多连接会有所帮助,因此每个连接都会转到不同的后端。如果您只有一台服务器(后端),您应该确保创建到同一台服务器的多个连接实际上会有所帮助,如果服务器不是瓶颈并且能够处理高网络吞吐量。
需要使用 RoundRobinLoadBalancer and something called EquivalentAddressGroup. To create multiple sub-channels to the same server you have to be able to create multiple EquivalentAddressGroup
s for the same server. A custom NameResolver (or DnsNameResolver) 在一个频道中创建多个子频道。