负载均衡
gRPC 支持客户端负载均衡。
负载均衡策略
go
import "google.golang.org/grpc/balancer/roundrobin"
conn, _ := grpc.Dial(
"dns:///my-service",
grpc.WithDefaultServiceConfig(`{"loadBalancingConfig": [{"round_robin":{}}]}`),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)服务发现
DNS
go
conn, _ := grpc.Dial("dns:///my-service:50051", ...)自定义解析器
go
import "google.golang.org/grpc/resolver"
func init() {
resolver.Register(&myResolverBuilder{})
}
type myResolverBuilder struct{}
func (b *myResolverBuilder) Build(target resolver.Target,
cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
// 实现服务发现逻辑
}健康检查
go
import "google.golang.org/grpc/health/grpc_health_v1"
// 客户端检查
client := grpc_health_v1.NewHealthClient(conn)
resp, _ := client.Check(ctx, &grpc_health_v1.HealthCheckRequest{})
// 服务端实现
grpc_health_v1.RegisterHealthServer(s, health.NewServer())