grpc的负载均衡分为client-side load balance和server-side load balance。
所谓的“客户端负载均衡”是指主调方调用被调方的时候,在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig,这个DefaultServiceConfig默认是用pick-first策略。也支持round robin策略,需要指定。同时也可以自定义一个实现了balancer.Builder接口的策略,比如“一致性哈希”策略。
所谓的“服务端负载均衡”是指主调方不用管这些调用细节,不用管请求会落到哪个socket上。在主调方与被调方之间会有一个中间件,用于服务发现和转发,比如nginx,envoy,istio,都可以。对于主调方只管把请求打到中间件上,中间件会挑选一个被调方的实例响应请求。