Spring Cloud Feign組件負載均衡詳解

知道Feign組件,肯定知道還有一個Ribbon組件,我們來看一下這兩個的區(qū)別拥峦。

  1. Ribbon和Feign簡單介紹

    spring cloud的 Netflix 中提供了兩個組件實現(xiàn)軟負載均衡調用:ribbon 和 feign运怖。

    Ribbon

    是一個基于 HTTP 和 TCP 客戶端 的負載均衡的工具。
    它可以 在客戶端 配置 RibbonServerList(服務端列表)搀矫,使用 HttpClient 或 Sprig的RestTemplate模擬http請求抹沪,就跟我們平常調用hhtp接口的操作比較相似。Ribbon在調取服務的過程瓤球,使用的http的服務地址是注冊中心的服務地址融欧,多個相同的服務在注冊中心注冊,通過Ribbon卦羡,就可以實現(xiàn)對相同服務的負載均衡噪馏。

    Feign

    Feign是在 Ribbon的基礎上進行了一次改進升級麦到,是一個使用起來更加方便的 HTTP 客戶端。
    其采用接口的方式欠肾, `只需要創(chuàng)建一個接口瓶颠,在接口上面添加@FeignClient注解并指明要調取的服務提供者mingc,然后在接口方法上通過@RequestMapping注解加上服務提供者的接口地址刺桃,即可實現(xiàn)服務的調用 粹淋,將需要調用的其他服務的方法定義成抽象方法即可,不需要自己構建http請求瑟慈,通過接口抽象桃移,使項目看起來層次比較清晰明了,所以大家一般都選擇Feign是在葛碧。

    因為Feign本身里面就包含有了Ribbon借杰,因為ribbon具有負載均衡功能,所以feign也繼承了此功能进泼。

  2. 負載均衡的實現(xiàn)

    在上篇博客中第步,最后我們已經(jīng)實現(xiàn)了Feign的負載均衡。

    blog傳送門

    項目代碼傳送門

    項目模塊結構圖

    在這里插入圖片描述

    通過在cloud-consumer模塊中加入負載均衡bean配置缘琅,即可實現(xiàn)默認的輪訓負載均衡機制粘都。

    package com.consumer.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * @author: yhl
     * @DateTime: 2019/12/9 13:37
     * @Description:
     */
    
    @Configuration
    public class ConfigBean {
        /**
         * 默認按順序輪詢
         * @return
         */
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }
    

    我們重點說一下負載均衡均衡策略的切換。

  1. 復雜均衡策略的切換

    先了解一下Ribbon中實現(xiàn)了那幾種負載均衡算法刷袍。

    我們先看一下翩隧,Ribbon負載均衡設計類結構,首先在idea中找到抽象類AbstractLoadBalancerRule.java

    在類中的類名上右鍵選擇查看類圖

    在這里插入圖片描述

    結構如下呻纹,可以看出是實現(xiàn)了兩個規(guī)范接口堆生。

    在這里插入圖片描述

    我們繼續(xù)查看AbstractLoadBalancerRule.java的實現(xiàn)類,在上面的類圖AbstractLoadBalancerRule的框上鼠標右鍵雷酪,選擇show implmentations淑仆,出現(xiàn)如下內(nèi)容:

    在這里插入圖片描述

    我們可以看出AbstractLoadBalancerRule有這么多實現(xiàn)類,通過類名哥力,我們就可以看出這是負載均衡實現(xiàn)的算法類蔗怠。

    介紹一下 Ribbon的幾個比較常用的負載均衡實現(xiàn)

    策略類 命名 說明
    RandomRule 隨機策略 隨機選擇 Server
    RoundRobinRule 輪訓策略 按順序循環(huán)選擇 Server
    RetryRule 重試策略 在一個配置時問段內(nèi)當選擇 Server 不成功,則一直嘗試選擇一個可用的 Server
    BestAvailableRule 最低并發(fā)策略 逐個考察 Server吩跋,如果 Server 斷路器打開寞射,則忽略,再選擇其中并發(fā)連接最低的 Server
    AvailabilityFilteringRule 可用過濾策略 過濾掉一直連接失敗并被標記為 circuit tripped 的 Server锌钮,過濾掉那些高并發(fā)連接的 Server(active connections 超過配置的網(wǎng)值)
    ResponseTimeWeightedRule 響應時間加權策略 根據(jù) Server 的響應時間分配權重桥温。響應時間越長,權重越低梁丘,被選擇到的概率就越低侵浸;響應時間越短旺韭,權重越高,被選擇到的概率就越高掏觉。這個策略很貼切茂翔,綜合了各種因素,如:網(wǎng)絡履腋、磁盤珊燎、IO等,這些因素直接影響著響應時間
    ZoneAvoidanceRule 區(qū)域權衡策略 綜合判斷 Server 所在區(qū)域的性能和 Server 的可用性輪詢選擇 Server遵湖,并且判定一個 AWS Zone 的運行性能是否可用悔政,剔除不可用的 Zone 中的所有 Server

    具體可參考:http://www.reibang.com/p/186b4ceea6fc, 感謝作者延旧。

    Ribbon默認使用的是RoundRobinRule輪訓策略谋国。

    那么在我們在項目中到底如何切換自己想要的均衡策略模式呢?我們嘗試實現(xiàn)其中的一種

    在cloud-consumer模塊中的application.文件中加入如下配置:

    cloud-service:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    

    cloud-service為服務提供者在注冊中心的服務名稱迁沫。參數(shù)value為復雜均衡實現(xiàn)類在Ribbon包中的路徑芦瘾,如RandomRule隨機策略的類路徑類為:com.netflix.loadbalancer.RandomRule。切換的話只需要更改其他的算法實現(xiàn)類的類路徑集畅。(個人覺得這個方法好蹩腳近弟,必須知道負載均衡相關的算法類)

    還有其他的配置方式,具體的請參考:https://blog.csdn.net/wo18237095579/article/details/83384134挺智,
    感謝作者祷愉。

  2. 實現(xiàn)自定義負載均衡策

    創(chuàng)建自定義策略類,繼承抽象類AbstractLoadBalancerRule赦颇,重寫choose方法為自己的負載均衡邏輯二鳄,在配置類中添加下bean配置。

    @Bean
    public IRule myRule()
    {
        return new CustomeRule(); //自定義負載均衡規(guī)則
    }
    

    具體可參考:https://www.cnblogs.com/yufeng218/p/10952724.html媒怯,感謝作者订讼。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扇苞,隨后出現(xiàn)的幾起案子欺殿,更是在濱河造成了極大的恐慌,老刑警劉巖杨拐,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祈餐,死亡現(xiàn)場離奇詭異擂啥,居然都是意外死亡哄陶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門哺壶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屋吨,“玉大人蜒谤,你說我怎么就攤上這事≈寥牛” “怎么了鳍徽?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敢课。 經(jīng)常有香客問我阶祭,道長,這世上最難降的妖魔是什么直秆? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任濒募,我火速辦了婚禮,結果婚禮上圾结,老公的妹妹穿的比我還像新娘瑰剃。我一直安慰自己,他們只是感情好筝野,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布晌姚。 她就那樣靜靜地躺著,像睡著了一般歇竟。 火紅的嫁衣襯著肌膚如雪挥唠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天焕议,我揣著相機與錄音猛遍,去河邊找鬼。 笑死号坡,一個胖子當著我的面吹牛懊烤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宽堆,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼腌紧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畜隶?” 一聲冷哼從身側響起壁肋,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籽慢,沒想到半個月后浸遗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箱亿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年跛锌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片届惋。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡髓帽,死狀恐怖菠赚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郑藏,我是刑警寧澤衡查,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站必盖,受9級特大地震影響拌牲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜歌粥,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一们拙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阁吝,春花似錦砚婆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甲馋,卻和暖如春埂奈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背定躏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工账磺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痊远。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓垮抗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碧聪。 傳聞我的和親對象是個殘疾皇子冒版,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容