1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        終于有人放大招把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)線程定期刷新和過濾服務(wù)列表。

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

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


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


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

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


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

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


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

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

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

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

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

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

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

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

        ● 可用服務(wù)過濾負(fù)載均衡(AvailabilityFilteringRule):這個(gè)策略會(huì)跳過斷路中的服務(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來判斷是否選擇某個(gè)后端服務(wù),前者使用一個(gè)區(qū)域?yàn)閱挝豢疾炜捎眯裕豢捎玫膮^(qū)域會(huì)被丟棄,從剩下的區(qū)域中選擇可用的服務(wù),AvailabilityPredicate用于過濾掉連接數(shù)過多的服務(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. 覺得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;

        3. 感謝大家的支持!

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

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产无遮挡又黄又爽免费视频下载 | 城市美妇呻吟高潮泄身 | 三级无码在线播放 | 97人人澡人人爽人人模亚洲 | 国产情侣自拍露脸到高潮 | 国产在线观看一区二区 | 日韩色色网站 | 欧美狠狠撸 | 欧美高清无码视频 | 大香伊人 |