gRPC负载均衡

 

通常我们理解的负载均衡,是指 网络连接 的负载均衡。

而gRPC的负载均衡,是指 调用 (Per-Call Load Balancing) 的负载均衡。

我们透过以下的例子,来做说明。

 

假设

gRPC Server x 3

gRPC Client x 1

 

  1. 假设我们不使用gRPC的负载均衡,我们可以这样实现:

    Client对三台Server建立连接,分别进行调用.

 

  1. 假设我们使用gRPC的负载均衡

Client直接访问DNS域名得到地址列表,gRPC自动进行轮询调用.

总结

gRPC所自带的负载均衡功能,是指创建ManagedChannel (在go语言中是ClientConn)对象时,它是对应多地址的,这样构建出来的Client执行方法调用的时候,会把请求平均分配给这些连接。

  1. 性价比最高的方式,直接使用gRPC的服务发现(DNS)以及负载均衡。

    服务发现默认支持DNS,负载均衡只有 pick_first 和 round_robin

  2. 完全自己实现,胖客户端。

    应用内自己实现服务发现和负载均衡策略,定制性高,但是开发量较大,侵入式开发会导致强依赖

  3. 折中的方案

    gRPC虽然默认只有DNS解析来获取IP地址列表并实行负载均衡,但是它的API是可以扩展的,用户可以通过编写Resolver Plugins来支持自定义NameResolver