第15章:负载均衡
本章目标
理解 gRPC Client-side 负载均衡
15.1 gRPC 负载均衡方式
方式1:Proxy LB(传统)
Client → LB(nginx/envoy) → Server1/Server2
方式2:Client-side LB(gRPC 推荐)
Client → [Name Resolver + LB策略] → 直连 Server1/Server215.2 Client-side 负载均衡
go
import _ "google.golang.org/grpc/balancer/roundrobin"
conn, _ := grpc.Dial(
"dns:///localhost:50051,localhost:50052",
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
// DNS 解析多个 IP → Round Robin 分配15.3 连接管理
go
conn, _ := grpc.Dial(target,
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(10*1024*1024)),
)
defer conn.Close()
// gRPC 自动管理连接池、重连15.4 一致性哈希(需要时)
适合有状态服务(同一用户请求路由到同一节点):
go
// 使用一致性哈希 balancer
import _ "github.com/makasim/grpc-go-consul-resolver"
// 配置一致性哈希策略本章小结
- gRPC 支持 Client-side LB(默认 Proxy LB)
- Round Robin:
"loadBalancingPolicy":"round_robin" - 用 DNS resolver + 多地址实现简单负载均衡
- gRPC 自动管理连接池
练习题
- 启动两个 Server(不同端口),Client 用 Round Robin 连接。
- 观察请求是否均匀分配到两个 Server。