Java gRPC连接循环

Java gRPC连接循环,java,grpc,tensorflow-serving,grpc-java,Java,Grpc,Tensorflow Serving,Grpc Java,我们正在建立一个集群来处理gRPC上的推断(使用Tensorflow服务)。我们打算使用第7层负载平衡器(AWS ALB)来分配负载。对于我们的工作量,每分钟将从每个客户帐户进行多次推断。据我所知,gRPC持有每个通道的连接状态。因此,为了让ALB完成它的工作,我们需要定期在客户机实例上拆除并重建连接 我的问题:在Java中循环连接的最佳实践是什么 下面是我建议的代码,在每个客户端通道上每隔几分钟调用一次。我假设当第一个连接关闭时,我们可以着手创建一个新的连接,并立即对其发出请求;或者,我们是否

我们正在建立一个集群来处理gRPC上的推断(使用Tensorflow服务)。我们打算使用第7层负载平衡器(AWS ALB)来分配负载。对于我们的工作量,每分钟将从每个客户帐户进行多次推断。据我所知,gRPC持有每个通道的连接状态。因此,为了让ALB完成它的工作,我们需要定期在客户机实例上拆除并重建连接

我的问题:在Java中循环连接的最佳实践是什么

下面是我建议的代码,在每个客户端通道上每隔几分钟调用一次。我假设当第一个连接关闭时,我们可以着手创建一个新的连接,并立即对其发出请求;或者,我们是否需要等待前一个通道先关闭。在我们的情况下,通道(很可能)是空的,因为之前的请求早于10秒

        if (mChannel != null) 
            mChannel.shutdown();
        
        mChannel = ManagedChannelBuilder.forAddress(mHost, mPort).usePlaintext().build();
        mStub    = PredictionServiceGrpc.newBlockingStub(mChannel);

最佳实践是使用

但是,您可以做一些调整来终止客户端连接

var builder = ManagedChannelBuilder.forAddress(mHost, mPort)
.keepAliveTime(15, TimeUnit.SECONDS)
.keepAliveTimeout(5, TimeUnit.SECONDS);
上述配置将确保终止粘性gRPC连接,AWS ALB可以统一执行负载平衡请求


根据您的用例,您还可以尝试其他选项,例如重试等。请参见

您是否尝试从中实现客户端负载平衡?是。许多客户机通过一个LB连接到一个实例集群来处理推断。我们可以自由地更新客户端代码以提供连接循环,因此这是最有意义的(至少对我来说是这样)。使用L7代理时,您不应该需要大量的连接循环(除了负载平衡代理之外)。使用L7代理,每个RPC可以转到不同的后端。我不正确。我们在这里使用服务器端负载平衡。谢谢你的回答。这正是我要找的!