A gRPC naming.Resolver
that uses DNS SRV.
This allows you to do simple client-side Round Robin load balancing of gRPC requests.
rr := grpc.RoundRobin(grpcsrvlb.New(srv.NewGoResolver(2 * time.Second)))
conn, err := grpc.Dial("grpc.my_service.my_cluster.internal.example.com", grpc.WithBalancer(rr))
This will resolve the DNS SRV address grpc.my_service.my_cluster.internal.example.com
using the Golang DNS resolver
with an assumed TTL of 2 seconds and use that as a set of backends for the gRPC RoundRobin
policy. From this point on
all requests on the conn
(reusable across gRPC clients) will be load balanced to a set of these backends.
This is alpha software. It should work, but key components are missing:
- unit tests
- integration tests with gRPC
-
srv.Resolver
implementation that is concurrent and respectsTTL
, see miekg/dns
go-srvlb
is released under the Apache 2.0 license. See the LICENSE file for details.