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