摘要:是一個客戶端負載均衡器,它可以很好地控制和客戶端的行為。根據響應時間分配一個,響應時間越長,越小,被選中的可能性越低。
Ribbon是一個客戶端負載均衡器,它可以很好地控制HTTP和TCP客戶端的行為。Feign已經默認使用了Ribbon(參考文章)
一、先來看看ribbon的幾個核心類
1、IClientConfig 默認實現類DefaultClientConfigImpl,主要用來配置ribbon客戶端的相關屬性配置
2、ServerListUpdater默認實現類PollingServerListUpdater,主要負責動態更新服務器列表
start方法調用后會啟動一個定時任務,延時1s開始執行,以每30s的時間間隔周期執行
周期時間間隔可以通過ribbon.ServerListRefreshInterval=1000或者ribbonClientName.ribbon.ServerListRefreshInterval=1000來設置
start方法的啟動由DynamicServerListLoadBalancer初始化的時候執行調用
3、ServerList獲取服務器列表
默認實現類ConfigurationBasedServerList,默認是從配置文件取服務器列表,這樣配置[ribbonClinetName].ribbon.listOfServers=xxx,xxx
ConsulServerList引入consul作服務發現的實現類,主要負責獲取注冊中心的服務器列表
備注:可以通過配置來擴展自己的ServerList實現,像這樣:[ribbonClient].ribbon.NIWSServerListClassName=類名
4、ServerListFilter服務器列表過濾器
默認實現類ZonePreferenceServerListFilter主要根據分區來過濾服務器列表
HealthServiceServerListFilter引入consul服務發現的實現類,主要負責過濾consul健康檢查通過的服務器列表(在ConsulServerList中會獲取所有的服務器列表,包括健康檢查沒有通過的服務器)
備注:可以通過配置來擴展自己的ServerList實現,像這樣[ribbonClient].ribbon.NIWSServerListFilterClassName=類名
5、IPing檢查服務器是否或者
默認實現DummyPing,這是一個假的檢測著,永遠返回是true
ConsulPing,引入consul服務發現的實現類,主要根據consul返回的checks參數來判斷服務器是否活著,跟HealthServiceServerListFilter的過濾判斷一樣
備注:可以通過配置來擴展自己的ServerList實現,像這樣:[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
7、ILoadBalancer負載均衡總控制器,默認實現類ZoneAwareLoadBalancer,其啟動了整個負載均衡客戶端
可以通過配置來擴展自己的ServerList實現,像這樣:[ribbonClient].ribbon.NFLoadBalancerClassName=類名
負載均衡器啟動時序圖:
初始化時首先會初始化一個定時任務,每隔30s執行一次,緩存里面會保存所有從注冊中心獲取實例列表allServerList和經過ping成功的實例列表upServerList,但是負載均衡的時候拿到的列表是allServerList而非upServerList,不明白這個ping的意義在哪里
啟動一個定時任務,定時從注冊中心拉取服務列表,每個30s執行一次
初始化獲取服務列表,拉取到的服務列表經過ServiceFilter過濾后保存在緩存里面
當客戶端發起調用的時候會調用ILoadBalancer的chooseServer方法,根據IRule的負載均衡算法選擇一個實例返回給調用者.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76593.html
摘要:每種可被解析的格式必須具有由詞匯及語法規則組成的特定的文法,稱為上下文無關文法。解析解析器,每個標識都有特定的正則進行解析。開發者可以將腳本標識為,以使其不阻塞文檔解析,并在文檔解析結束后執行。 瀏覽器組成 用戶界面-地址欄、按鈕之類的 瀏覽器引擎-用來查詢及操作渲染引擎的接口 渲染引擎-顯示請求的內容 網絡-進行網絡請求 ui后端-用來滬指選擇框、對話框的基本組件 js解析器 數據...
摘要:通過以上四個步驟,瀏覽器完成從用戶處接收用戶要訪問的域名到從域名服務主機處獲取數據的整個過程。概念解析指別名記錄也被稱為規范名字可以理解為對域名設置別名。詳細可以參考一些名詞解釋 傳統的網絡訪問形式為: showImg(http://segmentfault.com/img/bVcqjG); 由上圖可見,用戶訪問未使用CDN緩存網站的過程為: 用戶向瀏覽器提供要訪問的域名; 瀏...
摘要:使用指定的參數調用構造函數,并將綁定到新創建的對象。由構造函數返回的對象就是表達式的結果。情況返回以外的基本類型實例中只能訪問到構造函數中的屬性,和情況完全相反,結果相當于沒有返回值。 定義 new 運算符創建一個用戶定義的對象類型的實例或具有構造函數的內置對象的實例。 ——(來自于MDN) 舉個栗子 function Car(color) { this.color = co...
閱讀 773·2019-08-29 16:32
閱讀 841·2019-08-29 12:31
閱讀 3221·2019-08-26 18:26
閱讀 3161·2019-08-26 12:20
閱讀 1738·2019-08-26 12:00
閱讀 3011·2019-08-26 10:58
閱讀 2818·2019-08-23 17:08
閱讀 2315·2019-08-23 16:32