我已经阅读了https://github.com/grpc/grpc/blob/master/doc/load-balancing.md的负载平衡页面,但仍然不知道如何正确地在后端GRPC实例之间实现负载平衡。我们正在部署多个gRPC“微服务”实例,并希望我们的其他gRPC客户端能够在它们之间进行路由。我们将它们作为pod部署在kubernetes中(实际上是Google Container Engine)。
谁能解释一下在gRPC服务器之间实现gRPC客户端请求负载均衡的“推荐”方法?看起来客户端需要知道端点--难道不能利用容器引擎中内置的LoadBalancer来提供帮助吗?
发布于 2017-05-31 09:03:06
我不能谈论kubernetes,但是关于gRPC负载均衡,基本上有两种方法:
grpc::ChannelArguments::SetLoadBalancingPolicyName (将来也可以通过"service configuration”进行选择,但是如何在DNS记录中对该配置进行编码的设计还没有最终确定)。
如果你有任何问题,请告诉我。
发布于 2017-11-20 15:01:02
对于grpc服务器之间的负载平衡,kubernates默认负载平衡没有帮助,因为它是一个L4负载均衡器。您可能需要L7负载均衡器。
为什么是L7?
grpc使用http2,其中连接是持久的,请求将通过相同的连接发送。L4负载均衡器将使用tcp连接进行负载均衡,但您需要在请求级别进行负载均衡,因此我们需要一个L7负载均衡器。尤其是在grpc服务器之间进行通信时。
有几个选择,你可以使用Linkered/Envoy来做这件事,它们与kubernates一起工作得很好,也提供了一个很好的服务网格。
要将您的服务暴露给外部工作,您可以使用nghttpx和nghttpx入口控制器。
您也可以使用客户端负载平衡,但我看不出这样做有什么好处。
发布于 2018-03-10 03:29:09
正如Samarendra所提到的
您可以查看Envoy,它最初是在Lyft构建的。
它为传入和传出连接提供了对HTTP/2和gRPC的一流支持。
适用于
我们一直在gojek为我们的gRPC服务使用特使,它在相当高的负载下为我们提供了很好的服务。
https://stackoverflow.com/questions/43753787
复制相似问题