首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gRPC负载均衡

gRPC负载均衡
EN

Stack Overflow用户
提问于 2017-05-03 15:28:23
回答 6查看 12.2K关注 0票数 19

我已经阅读了https://github.com/grpc/grpc/blob/master/doc/load-balancing.md的负载平衡页面,但仍然不知道如何正确地在后端GRPC实例之间实现负载平衡。我们正在部署多个gRPC“微服务”实例,并希望我们的其他gRPC客户端能够在它们之间进行路由。我们将它们作为pod部署在kubernetes中(实际上是Google Container Engine)。

谁能解释一下在gRPC服务器之间实现gRPC客户端请求负载均衡的“推荐”方法?看起来客户端需要知道端点--难道不能利用容器引擎中内置的LoadBalancer来提供帮助吗?

EN

回答 6

Stack Overflow用户

发布于 2017-05-31 09:03:06

我不能谈论kubernetes,但是关于gRPC负载均衡,基本上有两种方法:

  1. 对于简单的用法,您可以在为给定名称返回的地址列表(即为service.foo.com返回的ie列表)上启用循环调度。实现这一点的方法依赖于语言。对于C++,您可以使用带有"round_robin“作为参数的grpc::ChannelArguments::SetLoadBalancingPolicyName (将来也可以通过"service configuration”进行选择,但是如何在DNS记录中对该配置进行编码的设计还没有最终确定)。
  2. 使用grpclb协议。这适用于更复杂的部署。这个特性需要c-ares DNS resolver,这是#11237引入的(这个PR非常接近合并)。这是使grpclb在开源中工作所缺少的部分。特别是:
    • 看看this document。它会检查所需的DNS配置更改,以控制哪些地址被标记为平衡器。它目前是一个“提案”,很快就会被提升为一个文档。它可以被认为是非常权威的,它是#11237为balancer discovery.
    • Write实现的,一个常规的gRPC服务器(在任何语言中)实现the load balancer protocol。这是要在您的DNS记录中标记为平衡器的服务器(如the aforementioned document中所述),客户端的grpclb将与其通信以获取后端地址列表(称为server_lists)。在这个均衡器中,逻辑是简单的还是复杂的都由你决定。
    • 客户端在创建通道时会使用均衡器的DNS名称。另请注意,您的平衡器DNS名称可能指向多个地址。如果它们中的一个或多个被标记为平衡器,则将使用grpclb。如果有多个平衡器,会拿起哪个平衡器?客户端连接的第一个to.

如果你有任何问题,请告诉我。

票数 15
EN

Stack Overflow用户

发布于 2017-11-20 15:01:02

对于grpc服务器之间的负载平衡,kubernates默认负载平衡没有帮助,因为它是一个L4负载均衡器。您可能需要L7负载均衡器。

为什么是L7?

grpc使用http2,其中连接是持久的,请求将通过相同的连接发送。L4负载均衡器将使用tcp连接进行负载均衡,但您需要在请求级别进行负载均衡,因此我们需要一个L7负载均衡器。尤其是在grpc服务器之间进行通信时。

有几个选择,你可以使用Linkered/Envoy来做这件事,它们与kubernates一起工作得很好,也提供了一个很好的服务网格。

要将您的服务暴露给外部工作,您可以使用nghttpx和nghttpx入口控制器。

您也可以使用客户端负载平衡,但我看不出这样做有什么好处。

票数 5
EN

Stack Overflow用户

发布于 2018-03-10 03:29:09

正如Samarendra所提到的

您可以查看Envoy,它最初是在Lyft构建的。

它为传入和传出连接提供了对HTTP/2和gRPC的一流支持。

适用于

  • 群集发现服务的
    • 负载平衡(例如领事)

我们一直在gojek为我们的gRPC服务使用特使,它在相当高的负载下为我们提供了很好的服务。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43753787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档