golang grpc 负载均衡的方法

2018-09-21 21:27

阅读:671

  微服务架构里面,每个服务都会有很多节点,如果流量分配不均匀,会造成资源的浪费,甚至将一些机器压垮,这个时候就需要负载均衡,最简单的一种策略就是轮询,顺序依次选择不同的节点访问。

  grpc 在客户端提供了负载均衡的实现,并提供了服务地址解析和更新的接口(默认提供了 DNS 域名解析的支持),方便不同服务的集成

  使用示例

   conn, err := grpc.Dial( , grpc.WithInsecure(), // 负载均衡,使用 consul 作服务发现 grpc.WithBalancer(grpc.RoundRobin(grpclb.NewConsulResolver( 127.0.0.1:8500, grpc.health.v1.add, ))), )

  创建连接的时候可以使用 WithBalancer 选项来指定负载均衡策略,这里使用 RoundRobin 算法,其实就是轮询策略

  与 consul 的集成

  有了负载均衡策略,还需要一个地址解析和更新策略,可以使用 DNS 服务来实现,但如果我们使用 consul 来做服务的注册和发现,可以通过实现 ‘naming.Resolver 和 ‘naming.Watcher 接口来支持

   naming.Resolver: 实现地址解析 naming.Watcher: 实现节点的变更,添加或者删除

  参考链接

  gRPC Name Resolution:

  Load Balancing in gRPC:

  dns_resolver:

  代码地址:

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


评论


亲,登录后才可以留言!