json over http与gRPC1作比较,分别使用ghz[2]和hey[3]压测gRPC和json over http的实现,gRPC的性能(Requests/sec: 59924.34)要比http api性能(Requests/sec: 49969.9234)高出20%。实测gPRC使用的protobuf的编解码性能更是最快的json编解码的2-3倍,是Go标准库json包编解码性能的10倍以上
https://jishuin.proginn.com/p/763bfbd6c905
gRPC 的客户端负载均衡主要分为两个部分:
1)Name Resolver
2)Load Balancing Policy
gRPC 中的默认 name-system 是DNS,同时在客户端以插件形式提供了自定义 name-system 的机制。
gRPC NameResolver 会根据 name-system 选择对应的解析器,用以解析用户提供的服务器名,最后返回具体地址列表(IP+端口号)。
例如:默认使用 DNS name-system,我们只需要提供服务器的域名即端口号,NameResolver 就会使用 DNS 解析出域名对应的IP列表并返回。
gRPC 库都内置了几个负载均衡算法,比如 gRPC-Go 中内置了pick_first和round_robin两种算法。
pick_first:尝试连接到第一个地址,如果连接成功,则将其用于所有RPC,如果连接失败,则尝试下一个地址(并继续这样做,直到一个连接成功)。
round_robin:连接到它看到的所有地址,并依次向每个后端发送一个RPC。例如,第一个RPC将发送到backend-1,第二个RPC将发送到backend-2,第三个RPC将再次发送到backend-1。
https://www.lixueduan.com/post/grpc/12-client-side-loadbalance/
https://rafaeleyng.github.io/grpc-load-balancing-with-grpc-go
Go负载均衡
https://studygolang.com/articles/5245
https://github.com/kasvith/simplelb
https://github.com/liyue201/grpc-lb