具有GRPC流请求的代理负载平衡

Dik*_*rAz 2 proxy load-balancing grpc

我们使用流式RPC将大文件发送到GRPC服务器。像这样:

service FileReceiver
{
    rpc addData(stream DataChunk) returns (Empty)
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下是否可以使用代理负载均衡器,以使负载均衡器不会在流请求的中间切换服务器?随着客户数量的增加,它会很好地扩展吗?

Eri*_*son 5

HTTP负载平衡器通常会根据每个HTTP请求进行平衡。gRPC流是单个HTTP请求,与流中的消息数量无关。每个客户端都可以定向到不同的后端,因此可以扩展。因此,gRPC表现出了开箱即用的方式。

流RPC是有状态的,因此所有消息都必须发送到同一后端。这对于结果一致性(如反射)至关重要,对于某些工作负载(如您的案例)的性能也很有帮助。

但是,有关可伸缩性的一个注意事项是:如果流是长期存在的,则可以在某些后端具有高流比例的情况下出现“热点”。您的服务可以定期(几分钟或几小时,具体取决于您的需求)关闭流,并让客户端重新创建流以重新平衡。