Skip to content

负载均衡 ​

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())

参考:https://grpc.io/docs/