Ribbon是一個客戶端負載平衡器,它可以很好地控制HTTP和TCP客戶端的行為。 Feign已經預設使用了Ribbon(參考文章)
一、先來看看ribbon的幾個核心類別
1、IClientConfig
預設實作類別DefaultClientConfigImpl
,主要用來設定ribbon客戶端的相關屬性配置
2、ServerListUpdater
預設實作類別PollingServerListUpdater
,主要負責動態更新伺服器清單
start方法呼叫後會啟動一個定時任務,延時1s開始執行,以每30s的時間間隔週期執行
週期時間間隔可以透過ribbon.ServerListRefreshInterval=1000
或ribbonClientName.ribbon.ServerListRefreshInterval=1000
來設定
#DynamicServerListLoadBalancer初始化的時候執行呼叫
ServerList取得伺服器清單
ConfigurationBasedServerList,預設是從設定檔取伺服器列表,這樣設定
[ribbonClinetName].ribbon.listOfServers=xxx,xxx
引入consul作服務發現的實作類,主要負責取得註冊中心的伺服器清單
ServerList實現,像這樣:
[ribbonClient].ribbon.NIWSServerListClassName=類別名稱
ServerListFilter伺服器列表過濾器
實現,像這樣[ribbonClient].ribbon.NIWSServerListFilterClassName=類別名稱
#5、IPing
檢查伺服器是否或
預設實作
DummyPing
,這是一個假的偵測著,永遠回傳是true
ConsulPing
,引入consul服務發現的實作類,主要根據consul傳回的checks參數來判斷伺服器是否活著,跟
實現,像這樣:[ribbonClient].ribbon .NFLoadBalancerPingClassName=類別名稱
6、IRule
負載平衡選擇器
ZoneAvoidanceRule,複合判斷server所在區域的效能和server的可用性選擇server
RandomRule:隨機選擇一個server
#RoundRobinRule:roundRobin方式輪詢選擇server
#RetryRule:對選定的負載平衡策略機上重試機制。
WeightedResponseTimeRule:根據回應時間分配一個weight,回應時間越長,weight越小,被選取的可能性越低。
AvailabilityFilteringRule
:過濾掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高並發的的後端server( active connections 超過配置的閾值)
BestAvailableRule
:選擇一個最小的並發請求的server
ILoadBalancer
負載平衡總控制器,預設實作類別初始化時首先會初始化一個定時任務,每隔30s執行一次,緩存裡面會保存所有從註冊中心獲取實例列表allServerList和經過ping成功的實例列表upServerList,但是負載平衡的時候拿到的列表是allServerList而非upServerList,不明白這個ping的意義在哪裡
#啟動一個定時任務,定時從註冊中心拉取服務列表,每個30s執行一次
初始化取得服務列表,拉取到的服務列表經過ServiceFilter過濾後保存在快取裡面
當客戶端發起呼叫的時候會呼叫ILoadBalancer的chooseServer方法,根據IRule的負載平衡演算法選擇一個實例回傳給呼叫者.
相關文章:
WPF 4 Ribbon 開發之快捷工具列(Quick Access Toolbar )
SharePoint 2013 隱藏頁面的Ribbon ,選單等非內容元素
#以上是sping-cloud-ribbon原理解析:ribbon的幾個核心類的詳細內容。更多資訊請關注PHP中文網其他相關文章!