我们使用流式RPC将大文件发送到GRPC服务器。像这样:
service FileReceiver
{
rpc addData(stream DataChunk) returns (Empty)
}
在这种情况下是否可以使用代理负载均衡器,以便负载均衡器不会在流请求中间切换服务器?它会随着客户数量的增加而扩展吗?
答案 0 :(得分:4)
HTTP负载均衡器通常根据 HTTP请求进行平衡。 gRPC流是单个 HTTP请求,与流中的消息数量无关。每个客户端都可以定向到不同的后端,因此可以扩展。因此,gRPC表现出你想要开箱即用的方式。
Streaming RPC是有状态的,因此所有消息都必须转到同一个后端。这对于结果一致性非常重要(与reflection一样),对某些工作负载(如您的情况)的性能很有帮助。
关于可扩展性的一个注意事项:如果流是长寿的,那么您可以拥有“热点”,其中某些后端具有高比例的流。您的服务可以定期(几分钟或几小时,具体取决于您的需要)关闭流并让客户端重新创建流以重新平衡。