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