ribbon說明
對于ribbon詳細說明大家可以參考官網, 是一個軟負載均衡的元件,它能夠對服務叢集實作負載均衡,主要有一下幾個功能:
1.為通訊的用戶端提供服務的DNS或者ip
2. 根據某些算法,循環通路某些服務
某些負載均衡器能提供下面的進階功能:
1.通過将用戶端與伺服器端劃分幾個區(zone),來建立他們之間的關系,使他們在相同的區,來減小延遲
2. 儲存服務的統計資訊,避免高延遲或者頻繁請求失敗的服務
3. 儲存區(zone)的統計資訊,避免可能停止的區
負載均衡元件
Rule: 一個算法元件,決定在服務清單中使用哪一個
Ping: 一個背景運作的元件,确定服務是否可用
ServerList: 服務清單,可以是動态的也可以是靜态的,如果是動态的(
DynamicServerListLoadBalancer
),一個背景線程會定時重新整理和過濾這個服務清單
這些元件可以用程式設定,也可以在配置檔案中設定
-
: Should implement<clientName>.ribbon.NFLoadBalancerClassName
ILoadBalancer
-
: Should implement<clientName>.ribbon.NFLoadBalancerRuleClassName
IRule
-
: Should implement<clientName>.ribbon.NFLoadBalancerPingClassName
IPing
-
: Should implement<clientName>.ribbon.NIWSServerListClassName
ServerList
-
: Should implement<clientName>.ribbon.NIWSServerListFilterClassName
ServerListFilter
IRule
根據某個算法,從服務清單中選擇一個服務進行通路
a. RoundRobinRule
預設的,輪詢規則,也是很多進階規則中退避的一種政策
b. AvailabilityFilteringRule
會過濾掉打開熔斷的服務或者是高并發連接配接數量的服務
c. WeightedResponseTimeRule
通過服務的平均響應時間,給每一個服務一個權重,響應時間越長,權重越小,開始統計資訊不足,應用輪詢政策
d. RetryRule
先按照輪詢政策,如果請求服務失敗,會在指定時間内進行重試
e. BestAvailableRule
先過濾掉斷路器的服務,然後選擇一個并發量最小的
f. RandomRule
随機擷取一個服務
IPing
a. DummyPing
預設傳回true,即認為服務永遠活着
b. NIWSDiscoveryPing
如果Discovery Client認為服務線上,即認為服務活着
c. NoOpPing
永遠傳回true,認為服務或者,DummyPing源碼裡面多了一個配置
d. PingUrl
會使用HttpClient調用服務的一個url,如果成功,則認為服務活着
ServerList
static server list
在程式中設定一系列靜态服務
BaseLoadBalancer.setServersList()
ConfigurationBasedServerList
在配置檔案中設定,如果屬性時動态改變的,服務清單也會改變
sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80
DiscoveryEnabledNIWSServerList
從eureka服務擷取服務清單,服務叢集必須由VipAddress辨別
ServerListFilter
被用在
DynamicServerListLoadBalancer
中,用來過去過濾服務清單中的服務。
ZoneAffinityServerListFilter
過濾出與用戶端不在同一個zone的服務,除非用戶端的zone沒有可用的服務。通過下面方式開啟
myclient.ribbon.EnableZoneAffinity=true
ServerListSubsetFilter
此過濾器確定用戶端僅看到ServerList實作傳回的整個伺服器的固定子集。它還可以定期用新伺服器替換可用性較差的子集中的伺服器。要啟用此過濾器,請指定以下屬性
myClient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
# the server must register itself with Eureka server with VipAddress "myservice"
myClient.ribbon.DeploymentContextBasedVipAddresses=myservice
myClient.ribbon.NIWSServerListFilterClassName=com.netflix.loadbalancer.ServerListSubsetFilter
# only show client 5 servers. default is 20.
myClient.ribbon.ServerListSubsetFilter.size=5
ServerListUpdater
DynamicServerListLoadBalancer狀态下,更新伺服器清單
PollingServerListUpdater
預設,定時更新
EurekaNotificationServerListUpdater
收到通知時,更新伺服器清單
IClientConfig
定義各種配置資訊,用來初始化ribbon用戶端與負載均衡器
ILoadBalancer
定義軟負載均衡的操作接口,動态更新服務清單并且根據指定政策算法,從服務清單中選擇一個服務
配置檔案格式
<clientName>.<nameSpace>.<propertyName>=<value>
<clientName>:這是ribbon的用戶端名稱,如果此值為沒有配置,則此條屬性會作用到所有的用戶端。
<nameSpace>:預設值為 ribbon
<propertyName>:所有的可用的屬性都在com.netflix.client.conf.CommonClientConfigKey。
如果你沒有配置任何屬性,則ribbon會使用com.netflix.client.config.DefaultClientConfigImpl裡的值。
實時内容請關注微信公衆号,公衆号與部落格同時更新:程式員星星