GRPC客户端负载平衡:节点之一关闭

马赫什:

对于Grpc服务,使用客户端负载平衡。

频道创建

ManageChannelBuilder.forTarget("host1:port,host2:port,host3:port").nameResolverFactory(new CustomNameResolverProvider()).loadBalancerFactory(RoundRobinBalancerFactory.getInstance()).usePlaintText(true).build();

使用此通道创建存根。

问题

如果服务[host1]之一发生故障,那么存根(stub)是否将处理这种情况,并且不向服务[host1]发送任何进一步的请求?

根据https://grpc.io/blog/loadbalancing上的文档

胖客户端方法意味着在客户端中实现了负载平衡智能。客户端负责跟踪可用服务器,它们的工作负载以及用于选择服务器的算法。客户端通常集成与其他基础架构通信的库,例如服务发现,名称解析,配额管理等。

那么,ManagedChannel类的职责是维护活动服务器列表,还是应用程序代码需要维护活动服务器列表并每次使用活动服务器列表创建ManagedChannel实例?

测试结果

根据测试,如果一项服务中断,则不会影响负载平衡,并且所有请求都将得到正确处理。

因此,可以假定存根或ManagedChannel类都处理活动服务器列表吗?

回答文档将受到高度赞赏。

埃里克·安德森(Eric Anderson):

负载平衡器通常处理发生故障的节点。即使由外部服务进行管理,节点也可能突然崩溃,并且Load Balancer希望避免这些节点。因此,我知道所有gRPC的Load Balancer实施都可以避免后端关闭时调用失败。

选择第一(默认),遍历地址,直到工作为止。循环只循环在工作连接上的知更鸟。因此,您描述的内容应该可以正常工作。

我将注意到您的方法确实存在一个缺点:您无法在进程运行时更改服务器。删除损坏的后端是一回事,而添加新的工作后端则是另一回事。如果您的负载过高,则可能无法通过添加更多工作程序来解决该问题,因为即使您添加更多工作程序,您的客户端也无法连接到他们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

gRPC客户端负载平衡

grpc v1.34.1 的客户端负载平衡,不推荐使用 nameResolverFactory

多语言和客户端负载平衡

如何从将x-real-ip和x-forward-for添加到标头的负载平衡器获取gRPC中的客户端IP地址?

Azure负载平衡器IP会覆盖客户端IP

Apache Http客户端和负载平衡器

RabbitMQ服务器(代理)而不是使用者(客户端)的负载平衡

Azure负载平衡集保留客户端IP

PaaS云(PCF)上的客户端负载平衡(Ribbon)和服务发现(Eureka)

负载平衡器没有可供客户端使用的服务器

如何在负载平衡的 IIS 服务器中查找客户端 IP 地址

Play框架-使用TCP负载平衡时检索客户端的IP

GCP HTTP负载平衡器-Websocket正在升级,但客户端没有框架

跨 ActiveMQ 代理网络负载平衡客户端连接

来自服务器的响应是否必须通过负载平衡器或直接传递给客户端?

在负载平衡情况下使用WCF 4.5 RemoteEndpointMessageProperty获取客户端IP地址

使用Modulus从Meteor访问客户端的IP地址(而不是负载平衡器的IP地址)

如何在Node.js中为发现的微服务进行客户端负载平衡

使用wsHttpBinding和带有客户端凭据类型Windows的消息安全性对WCF进行负载平衡

CCS需要多长时间关闭一次连接以执行负载平衡?

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

通过分片进行grpc负载平衡

Corda节点与Spring Boot客户端一起关闭

关闭客户端

SolrCloud负载平衡

服务器关闭时,负载平衡失败

Docker节点级别的负载平衡不起作用

如果端点之一停止连接,Apache Camel 的负载平衡路由将不起作用

gRPC客户端超时