<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          終于有人放大招把Ribbon的核心工作原理給一次性講清楚了

          共 2178字,需瀏覽 5分鐘

           ·

          2022-07-08 13:57

          本篇文章即將介紹Ribbon的核心工作原理。

          Ribbon的核心工作原理

          下面我們從Ribbon的負(fù)載均衡核心組件、負(fù)載均衡策略、Ribbon的工作流程等方面講解Ribbon的核心工作原理。

          Ribbon的負(fù)載均衡核心組件

          ● Rule:用于從服務(wù)列表中選取服務(wù)的邏輯組件。

          ● Ping:在后臺(tái)運(yùn)行的確保服務(wù)可用性的組件。

          ● ServerList:服務(wù)列表,它可以是靜態(tài)的也可以是動(dòng)態(tài)的,如果是動(dòng)態(tài)的(
          DynamicServer-ListLoadBalancer),將會(huì)啟動(dòng)一個(gè)后臺(tái)線(xiàn)程定期刷新和過(guò)濾服務(wù)列表。

          這些組件可以使用程序進(jìn)行配置,也可以使用客戶(hù)端配置屬性進(jìn)行 配 置 , 以 下 是 配 置 文 件 中 相 關(guān) 的 屬 性 名 ( 注 意 帶 上 前 綴<clientName>.<nameSpace>.):

          ● NFLoadBalancerClassName:配置ILoadBalancer的實(shí)現(xiàn)類(lèi)。


          NFLoadBalancerPingClassName:配置IPing的實(shí)現(xiàn)類(lèi)。


          NFLoadBalancerRuleClassName:配置IRule的實(shí)現(xiàn)類(lèi)。

          ● NIWSServerListClassName:配置ServerList的實(shí)現(xiàn)類(lèi)。


          NIWSServerListFilterClassName:配置ServerListFilter的實(shí)現(xiàn)類(lèi)。

          例如,將backend-service后端服務(wù)配置使用自帶的RetryRule進(jìn)行路由轉(zhuǎn)發(fā),下面是配置詳情:


          在我們的應(yīng)用程序中Netflix為每個(gè)Ribbon客戶(hù)端名稱(chēng)創(chuàng)建一個(gè)ApplicationContext,用于客戶(hù)端自定義一些組件實(shí)現(xiàn),包括:

          ● IClientConfig:為客戶(hù)端或者負(fù)載均衡器保存客戶(hù)端配置信息。

          ● ILoadBalancer:代表一個(gè)軟件的負(fù)載均衡接口。

          ● ServerList:定義了如何獲取可供選擇的服務(wù)列表。

          ● IRule:描述負(fù)載均衡策略?!?IPing:說(shuō)明如何執(zhí)行服務(wù)器的周期性Ping。

          Ribbon的負(fù)載均衡策略

          Ribbon客戶(hù)端組件提供一系列完善的配置選項(xiàng),比如連接超時(shí)、重試、重試算法等。Ribbon內(nèi)置可插拔、可定制的負(fù)載均衡組件,下面是用到的一些負(fù)載均衡策略。

          ● 簡(jiǎn)單輪詢(xún)負(fù)載均衡(RoundRobinRule):這是最簡(jiǎn)單的通過(guò)循環(huán)法選擇服務(wù)的負(fù)載均衡策略。它通常用作默認(rèn)策略或更高級(jí)策略的后備策略。

          ● 可用服務(wù)過(guò)濾負(fù)載均衡(AvailabilityFilteringRule):這個(gè)策略會(huì)跳過(guò)斷路中的服務(wù),或者高并發(fā)連接數(shù)的服務(wù)。默認(rèn)情況下,如果RestClient最近三次連接均失敗,則認(rèn)為該服務(wù)實(shí)例斷路,該實(shí)例會(huì)保持?jǐn)嗦窢顟B(tài)30s后進(jìn)入回路關(guān)閉狀態(tài),如果此時(shí)仍然連接失敗,那么等待進(jìn)入關(guān)閉狀態(tài)的時(shí)間會(huì)隨失敗次數(shù)的增加指數(shù)級(jí)增長(zhǎng)。

          ● 加權(quán)響應(yīng)時(shí)間負(fù)載均衡(WeightedResponseTimeRule):這個(gè)策略會(huì)為每一個(gè)服務(wù)按響應(yīng)時(shí)長(zhǎng)分配權(quán)重,響應(yīng)時(shí)間越長(zhǎng)權(quán)重越低,權(quán)重代表了該服務(wù)會(huì)被選中的概率。

          ● 區(qū)域感知負(fù)載均衡:這個(gè)策略基于區(qū)域同源關(guān)系(ZoneAffinity,也就是更傾向于選擇發(fā)出調(diào)用的服務(wù)所在的托管區(qū)域內(nèi)的服務(wù),這樣可以降低延遲,節(jié)省成本)選擇目標(biāo)服務(wù) 實(shí) 例 。Ribbon 使 用 ZoneAvoidancePredicate 和AvailabilityPredicate來(lái)判斷是否選擇某個(gè)后端服務(wù),前者使用一個(gè)區(qū)域?yàn)閱挝豢疾炜捎眯?,不可用的區(qū)域會(huì)被丟棄,從剩下的區(qū)域中選擇可用的服務(wù),AvailabilityPredicate用于過(guò)濾掉連接數(shù)過(guò)多的服務(wù)。

          ● 重試負(fù)載均衡(RetryRule):當(dāng)請(qǐng)求分發(fā)到集群中的一個(gè)服務(wù)后,請(qǐng)求連接失敗或者響應(yīng)超時(shí),會(huì)重新請(qǐng)求以獲取可用服務(wù),可以選擇重試當(dāng)前服務(wù)節(jié)點(diǎn),也可以改換其他節(jié)點(diǎn)。

          ● 隨機(jī)負(fù)載均衡(RandomRule):在現(xiàn)有服務(wù)之間隨機(jī)分配流量的一種負(fù)載均衡策略。

          Ribbon的工作流程

          下圖是Ribbon的工作流程簡(jiǎn)圖,我們?cè)谠创a分析中會(huì)進(jìn)一步分析,了解Ribbon是如何攔截HTTP請(qǐng)求進(jìn)行負(fù)載均衡的。


          Ribbon首先會(huì)攔截所有標(biāo)注@LoadBalance注解的RestTemplate,然 后 將 Ribbon 默 認(rèn) 的 攔 截 器 LoadBalancerInterceptor 添 加 到RestTemplate的執(zhí)行邏輯中,這樣每次執(zhí)行RestTemplate時(shí)都會(huì)攔截HTTP請(qǐng)求。當(dāng)有請(qǐng)求發(fā)生時(shí),Ribbon默認(rèn)會(huì)創(chuàng)建一個(gè)IloadBalancer實(shí)例。ILoadBalance在RibbonClientConfiguration中完成自動(dòng)配置,它可以實(shí)現(xiàn)定制化的IRule、IPing、ServerList。當(dāng)發(fā)生HTTP請(qǐng)求時(shí),IloadBalancer在服務(wù)集群中選擇一個(gè)服務(wù),然后發(fā)送請(qǐng)求到后端服務(wù)。

          本文給大家講解的內(nèi)容是Ribbon的核心工作原理

          1. 下篇文章給大家講解的內(nèi)容是Ribbon源碼解析

          2. 覺(jué)得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;

          3. 感謝大家的支持!

          本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話(huà)可以分享下,想學(xué)習(xí)更多的話(huà)可以到微信公眾號(hào)里找我,我等你哦。

          瀏覽 65
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久操视频在线观看免费视频 | 亚洲性色Aⅴ | 97大香蕉在线视频 | 翔田千里黑人 | 最近最好的2019中文 |