【发布时间】:2017-07-13 23:52:09
【问题描述】:
我们使用流式 RPC 将大文件发送到 GRPC 服务器。像这样:
service FileReceiver
{
rpc addData(stream DataChunk) returns (Empty)
}
在这种情况下是否可以使用代理负载均衡器,这样负载均衡器就不会在流请求中间切换服务器?它会随着客户数量的增加而很好地扩展吗?
【问题讨论】:
标签: proxy load-balancing grpc
我们使用流式 RPC 将大文件发送到 GRPC 服务器。像这样:
service FileReceiver
{
rpc addData(stream DataChunk) returns (Empty)
}
在这种情况下是否可以使用代理负载均衡器,这样负载均衡器就不会在流请求中间切换服务器?它会随着客户数量的增加而很好地扩展吗?
【问题讨论】:
标签: proxy load-balancing grpc
HTTP 负载平衡器通常按HTTP 请求 进行平衡。 gRPC 流是单个 HTTP 请求,与流中的消息数量无关。每个客户端都可以定向到不同的后端,因此可以扩展。所以 gRPC 的行为方式是你想要的开箱即用。
流式 RPC 是有状态的,因此所有消息都必须发送到同一个后端。这对于结果一致性至关重要(例如 reflection),并且有助于提高某些工作负载的性能(例如您的情况)。
关于可扩展性的一个注意事项:如果流是长期存在的,您可能会有“热点”,其中某些后端具有高比例的流。您的服务可以定期(几分钟或几小时,具体取决于您的需要)关闭流并让客户端重新创建流以重新平衡。
【讨论】: