一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

2021-10-21 10:42清云青云 Java教程

Spring cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端的負(fù)載均衡工具,Ribbon客戶端提供一系列完善的配置,如超時、重試等,Ribbon也可以實(shí)現(xiàn)自己的負(fù)載均衡算法,感興趣的朋友跟隨小編一起看看吧

1.什么是ribbon

目前主流的負(fù)載均衡方案分為以下兩種:

(1)集中式負(fù)載均衡:在消費(fèi)者和服務(wù)提供者中間使用獨(dú)立的代理方式進(jìn)行負(fù)載,有硬件的(f5),軟件的nginx

(2)客戶端事先拿到提供者請求連接集合,根據(jù)自己的請求情況做負(fù)載均衡,ribbon就屬于客戶端自己做負(fù)載均衡。

spring cloud ribbon是基于netflix ribbon實(shí)現(xiàn)的一套客戶端的負(fù)載均衡工具,ribbon客戶端提供一系列完善的配置,如超時、重試等。通過load balancer獲取到服務(wù)器提供的所有機(jī)器實(shí)例,ribbon會自動基于某種規(guī)則(輪詢、隨機(jī))去調(diào)用這些服務(wù)。ribbon也可以實(shí)現(xiàn)自己的負(fù)載均衡算法。

1.1客戶端的負(fù)載均衡

例如spring cloud中的ribbon,客戶端會有一個服務(wù)器地址列表,在發(fā)送請求前通過負(fù)載均衡算法選擇一個服務(wù)器,然后進(jìn)行訪問,這是客戶端負(fù)載均衡,即在客戶端進(jìn)行負(fù)載均衡算法分配。

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

1.2服務(wù)器端的負(fù)載均衡

例如通過nginx進(jìn)行負(fù)載均衡,先發(fā)送請求,然后通過負(fù)載均衡算法,在多個服務(wù)器之間選擇一個進(jìn)行訪問;即在服務(wù)器端進(jìn)行負(fù)載均衡算法分配。

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

1.3常見負(fù)載均衡算法

(1)隨機(jī):通過隨機(jī)選擇服務(wù)進(jìn)行執(zhí)行,一般這種方法使用較少

(2)輪詢:負(fù)載均衡默認(rèn)實(shí)現(xiàn)方式,請求來之后排隊(duì)處理

(3)加權(quán)輪詢:通過對服務(wù)器性能的分型,給高配置、低負(fù)載的服務(wù)器分配更高的權(quán)重,均衡各個服務(wù)器的壓力

(4)地址hash,通過客戶端地址請求地址的hash值取模映射進(jìn)行調(diào)度,

(5)最小鏈接數(shù):即使請求均衡了,壓力不一定會均衡,最小鏈接數(shù)法就是根據(jù)服務(wù)器的情況,例如請求積壓數(shù)的參數(shù),將請求分配到當(dāng)前壓力最小的服務(wù)器上

2.nacos使用ribbon

(1)nacos disconvery中默認(rèn)已經(jīng)引入了ribbon,不需要單獨(dú)引入

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

(2)添加@loadbalanced注解

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

(3)調(diào)用的時候使用服務(wù)器名稱替代ip+端口,即使用默認(rèn)輪詢的負(fù)載均衡方式

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

3.ribbon負(fù)載均衡策略

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

3.1常用負(fù)載均衡描述

①randomrule:隨機(jī)選擇一個服務(wù)實(shí)例

②roundrobinrule:輪詢負(fù)載均衡策略

③retrytule:在輪詢的基礎(chǔ)上進(jìn)行重試,一直重試的次數(shù)由服務(wù)連接的超時時間控制

④weightedresponsetimerule:一個服務(wù)的平均響應(yīng)時間越短,則權(quán)重越大,那么改實(shí)例被選中執(zhí)行任務(wù)的概率也越大

⑤bestavaliablerule:過濾掉失效的服務(wù)實(shí)例,順便找出并發(fā)最小的服務(wù)實(shí)例來使用

⑥zoneavoidancerule:判斷所在的區(qū)域,選擇最近的服務(wù)調(diào)用

⑦nacosrule:按隨機(jī)與配置的權(quán)重進(jìn)行選擇服務(wù)器

3.2修改默認(rèn)的負(fù)載均衡策略--配置類的方式

①賦值一份消費(fèi)端項(xiàng)目ordernacos,重命名為orderribbon

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

刪除orderribbon中原先的ordernacos.iml文件

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

修改orderribbon的pom.xml的artifactid值

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

把新添加的orderribbon添加到父項(xiàng)目的pom.xml的module中

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

刷新maven項(xiàng)目

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

②創(chuàng)建ribbonconfig配置類

使用@configuration標(biāo)識是配置類,使用@bean注入到spring容器中,方法名必須叫irule,否則無效。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 重寫負(fù)載均衡配置類
 */
@configuration
public class ribbonconfig {
 
 
    //方法名一定要叫irule
    @bean
    public irule irule(){
        return new randomrule();
    }
}

****注意此配置類不能放在@springbootapplication的注解@compentscan掃描得到的地方,否則自定義的配置類就會被所有的ribbonclients共享,

springboot啟動類,沒有配置掃描范圍的話,默認(rèn)掃描到與啟動類orderapplication同目錄級別的文件,此處為qingyun包下的文件都會被掃描到。

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

配置的目錄如下:

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

③在啟動類中使用注解@ribbonclients加入配置的自定義負(fù)載均衡器,value里面可以配置多個負(fù)載均衡器,是個數(shù)組類型的值;調(diào)用服務(wù)創(chuàng)建的resttemplate使用@loadbalanced進(jìn)行修飾。

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

啟動消費(fèi)者,兩個不同端口的服務(wù)提供者,通過頁面訪問,查看負(fù)載均衡機(jī)制由之前默認(rèn)的改為輪詢的方式

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

3.3修改默認(rèn)的負(fù)載均衡策略--配置文件的方式

使用配置文件的方式設(shè)定負(fù)載均衡方式,具體到某個服務(wù),格式:服務(wù)名.ribbon.nfloadbalancerruleclassname=服務(wù)方式

stock-service.ribbon.nfloadbalancerruleclassname=com.alibaba.cloud.nacos.ribbon.nacosrule

在nacos管理界面配置服務(wù)器的權(quán)重,權(quán)重越大,被選中的概率越大。

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

也可以在項(xiàng)目配置文件中設(shè)置

?
1
2
#設(shè)置服務(wù)的權(quán)重
spring.cloud.nacos.discovery.weight=4

3.4自定義負(fù)載均衡策略

(1)定義一個類繼承abstractloadbalancerrule,重寫choose方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * 自定義負(fù)載均衡策略
 */
public class customrule extends abstractloadbalancerrule {
 
 
    @override
    public void initwithniwsconfig(iclientconfig iclientconfig) {
 
    }
 
    @override
    public server choose(object o) {
        iloadbalancer loadbalancer = this.getloadbalancer();
 
        //獲取當(dāng)前請求的實(shí)例集合
        list<server> reachableservers = loadbalancer.getreachableservers();
 
        //使用線程安全生成一個隨機(jī)數(shù)
        int i = threadlocalrandom.current().nextint(reachableservers.size());
 
        //獲取服務(wù)
        server server = reachableservers.get(i);
 
 
        return server;
    }
}

(2)在application.properties中添加配置信息,指向自定義的配置類

?
1
stock-service.ribbon.nfloadbalancerruleclassname=com.rule.customrule

(3)開啟ribbon饑餓加載

當(dāng)沒有任何配置的情況下,第一次請求服務(wù)時,才會請求加載對應(yīng)的服務(wù)實(shí)例

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

可以在配置文件application.properties中配置饑餓加載

?
1
2
3
4
#開啟ribbon饑餓加載
ribbon.eager-load.enabled=true
#饑餓加載是服務(wù),多個使用逗號隔開
ribbon.eager-load.clients=stock-service

啟動項(xiàng)目的時候,加載配置服務(wù)使用的負(fù)載均衡策略

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

4.使用spring cloud loadbalancer替代ribbon

(1)在pom.xml中引入nacos-discovery時,去除ribbon,此時項(xiàng)目依賴的包里面已經(jīng)移除ribbon

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

(2)pom.xml中添加loadbalancer依賴,前提是項(xiàng)目中已經(jīng)引入了spring cloud依賴(父maven已經(jīng)引入)

?
1
2
3
4
5
<!-- 添加loadbalancer依賴-->
<dependency>
   <groupid>org.springframework.cloud</groupid>
   <artifactid>spring-cloud-starter-loadbalancer</artifactid>
</dependency>

(3)創(chuàng)建resttemplate時,需要加@loadbalanced

?
1
2
3
4
5
6
7
8
//程序啟動時創(chuàng)建resttemplate
    //使用注解loadbalanced標(biāo)識負(fù)載均衡,默認(rèn)輪詢的方式
    @bean
    @loadbalanced
    public resttemplate resttemplate(resttemplatebuilder builder){
        resttemplate build = builder.build();
        return build;
    }

(4)application.properties中禁用ribbon

?
1
2
#禁用ribbon
spring.cloud.loadbalancer.ribbon.enabled=false

(5)若是想自定義loadbalancer,與自定義ribbon類似的方式,使用@loadbalancerclients配置到springboot啟動類中

Spring cloud alibaba之Ribbon負(fù)載均衡實(shí)現(xiàn)方案

到此這篇關(guān)于spring cloud alibaba--ribbon負(fù)載均衡的文章就介紹到這了,更多相關(guān)spring cloud alibaba--ribbon負(fù)載均衡內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/ZHANGLIZENG/article/details/119008397

延伸 · 閱讀

精彩推薦
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項(xiàng)

    Java8中Stream使用的一個注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
  • Java教程20個非常實(shí)用的Java程序代碼片段

    20個非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實(shí)用的Java程序片段,對java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: free哆拍拍免费永久视频 | 草莓视频首页 | 99re热| 国产在线精品一区二区高清不卡 | 日韩欧免费一区二区三区 | 久久AV国产麻豆HD真实 | 国产三级精品久久三级国专区 | chinese特色video | 好爽好深好猛好舒服视频上 | 久久草福利自拍视频在线观看 | 色一情| 五月婷婷在线免费观看 | 午夜片无码区在线观看 | 人妖巨茎video | jiizz亚洲护士厕所 | 国产精品国色综合久久 | 3d蒂法受辱在线播放 | 日本成熟bbxxxxxxxx | np高h疯狂黄暴宫口 narutomanga玖辛奈之乳 | 欧美亚洲国产精品久久久 | 免费国产好深啊好涨好硬视频 | 美女扒开屁股让我桶免费 | 免费又爽又黄禁片视频在线播放 | 色婷婷综合久久久中文字幕 | 久久亚洲成a人片 | 哇嘎在线精品视频在线观看 | 无遮挡免费h肉动漫在线观看 | 四虎在线精品免费高清在线 | 国产成人在线综合 | 91丝袜足控免费网站xx | 蜜色网| 女人和男人搞基 | 欧美人禽杂交在线视频 | 精品国产91久久久久久久a | 91精品手机国产露脸 | 男人的天堂久久精品激情 | 极品一区| 色综合视频一区二区观看 | 91制片厂制作果冻传媒破解 | 精品国产美女AV久久久久 | 精品一区二区三区视频日产 |