2017-03-08 38 views
0

我正嘗試使用GRPC/Java構建負載平衡的服務器集管理機制。GRPC loadbalander示例

通過查看API文檔,有喜歡類: 負載平衡器,RoundRobinLoadBalancerFactory等

通過看名字,就好像他們應該做我想做的事情。 但是,我找不到任何使用這些類的代碼示例,即使我搜索的內容非常困難。

在另一方面,我發現了一些欺騙/節儉的例子是這樣的:https://github.com/benjumanji/finagle-serverset-example

我想知道如果任何人都可以分享一些工作GRPC的例子嗎?謝謝!

回答

0

gRPC LoadBalancerNameResolver一起使用。 NameResolver向LoadBalancer發出地址,LoadBalancer爲每個請求做出連接(Subchannels)和picking a Subchannel的決定。

NameResolver和/或LoadBalancer可以是set to ManagedChannelBuilder用於通道。

雖然接口在那裏,但沒有多少股票實現,而不是基本的DnsNameResolver和RoundRobinLoadBalancer。 PickFirstBalancerFactory是默認的「LoadBalancer」,實際上並沒有進行平衡。

如果您的地址在DNS中有多個地址,則在使用RoundRobinLoadBalancer時,您將觀察到循環法行爲。但是,我想你想從某些服務發現系統(如ZooKeeper)獲取地址。你將需要爲此實現一個NameResolver。如果你熟悉你選擇的發現系統,它不應該很難。

0

我們中庸之道發佈了一個非常簡單的爲例,可以在這裏找到:https://github.com/cloudtrust/lbclient/blob/master/grpc/staticResolver.go

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 
} 

我們希望這能幫助你,隨時問,如果你需要什麼。

+0

非常感謝!你有Java版本的例子嗎? –