golang-grpc Client BL

GRPC LoadBalance

这此主要描述下客户端做 LB

  • LB 算法有限 (roundrobin)
  • 客户端要支持
  • service 需要 headless 模式

代码

import(
"google.golang.org/grpc/balancer/roundrobin"
"google.golang.org/grpc/resolver"
)
resolver.SetDefaultScheme("dns")
conn, err = grpc.Dial(authRPCServiceURL, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithTimeout(2*time.Second), grpc.WithBalancerName(roundrobin.Name), grpc.WithUnaryInterceptor(otgrpc.OpenTracingClientInterceptor(tracer)), grpc.WithStreamInterceptor(
otgrpc.OpenTracingStreamClientInterceptor(tracer)))

k8s service

type: ClusterIP
clusterIP: None

客户端 LB, 这样做法比较简单, 不用引入 service mesh 的方式
但就是 LB 的算法太过单一,没有太强大的功能

references

https://github.com/jtattermusch/grpc-loadbalancing-kubernetes-examples

https://github.com/dreambo8563/static-assets/blob/master/grpc_loadbalancing_kubernetes_slides.pdf