GRPC负载均衡器示例

问题描述 投票:1回答:3

我正在尝试使用GRPC / Java构建具有负载平衡的服务器集管理机制。

通过查看API文档,可以使用以下类:LoadBalancer,RoundRobinLoadBalancerFactory等。

通过查看名称,似乎他们应该做我想做的事情。但是,我找不到使用这些类的任何代码示例,即使我用Google搜索非常努力。

另一方面,我发现了一些像这样的Finagle / Thrift例子:https://github.com/benjumanji/finagle-serverset-example

我想知道是否有人可以分享一些有用的GRPC示例?谢谢!

protocol-buffers load-balancing rpc grpc
3个回答
1
投票

gRPC LoadBalancerNameResolver合作。 NameResolver向LoadBalancer发送地址,LoadBalancer决定是否为每个请求建立连接(Subchannels)和picking a Subchannel

NameResolver和/或LoadBalancer可以是用于频道的set to ManagedChannelBuilder

虽然接口在那里,但是没有很多库存实现,而是基本的DnsNameResolver和RoundRobinLoadBalancer。 PickFirstBalancerFactory是默认的“LoadBalancer”,它实际上不做平衡。

如果您的地址在DNS中具有多个地址,则在使用RoundRobinLoadBalancer时您将观察到循环行为。但是,我想你想从一些服务发现系统中获取地址,例如ZooKeeper。您需要为此实现NameResolver。如果您熟悉您选择的发现系统,那应该不难。


0
投票

我们刚刚发布了一个非常简单的例子,可以在这里找到:qazxsw poi

https://github.com/cloudtrust/lbclient/blob/master/grpc/staticResolver.go

我们希望这可以帮助您,随时询问您是否需要任何东西。


0
投票

我刚从Kidong Lee的github存储库中找到了一个Java版本示例:package grpc import ( "google.golang.org/grpc/naming" ) type staticResolver struct{ updates []*naming.Update } type staticWatcher struct { updates chan []*naming.Update } func NewStaticResolver(addr []string) naming.Resolver { var ups []*naming.Update for _,a := range addr { ups = append(ups, &naming.Update{naming.Add, a, ""}) } return &staticResolver{ups} } func (w *staticWatcher) Next() ([]*naming.Update, error) { return <-w.updates, nil } func (w *staticWatcher) Close() { close(w.updates) } func (r *staticResolver) Resolve(target string) (naming.Watcher, error) { var ch chan []*naming.Update = make(chan []*naming.Update, 1) ch <- r.updates return &staticWatcher{ch}, nil }

https://github.com/mykidong/grpc-java-load-balancer-using-consul/blob/master/src/test/java/io/shunters/grpc/component/grpc/HelloWorldClientWithNameResolver.java

你可以从这个回购中找到更多的例子。

© www.soinside.com 2019 - 2024. All rights reserved.