欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年07月24日 10:11:49   作者:清云青云  
Spring cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端的負(fù)載均衡工具,Ribbon客戶端提供一系列完善的配置,如超時(shí)、重試等,Ribbon也可以實(shí)現(xiàn)自己的負(fù)載均衡算法,感興趣的朋友跟隨小編一起看看吧

1.什么是Ribbon

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.Nacos使用Ribbon

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

(2)添加@LoadBalanced注解

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

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

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

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

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

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

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

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

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

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

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

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

刪除OrderRibbon中原先的OrderNacos.iml文件

修改OrderRibbon的pom.xml的ArtifactId值

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

刷新maven項(xiàng)目

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

使用@Configuration標(biāo)識(shí)是配置類,使用@Bean注入到spring容器中,方法名必須叫iRule,否則無(wú)效。

/**
 * 重寫負(fù)載均衡配置類
 */
@Configuration
public class RibbonConfig {
 
 
    //方法名一定要叫iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

****注意此配置類不能放在@SpringBootApplication的注解@CompentScan掃描得到的地方,否則自定義的配置類就會(huì)被所有的RibbonClients共享,

springboot啟動(dòng)類,沒(méi)有配置掃描范圍的話,默認(rèn)掃描到與啟動(dòng)類OrderApplication同目錄級(jí)別的文件,此處為qingyun包下的文件都會(huì)被掃描到。

配置的目錄如下:

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

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

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

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

stock-service.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

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

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

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

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

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

/**
 * 自定義負(fù)載均衡策略
 */
public class CustomRule extends AbstractLoadBalancerRule {
 
 
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
 
    }
 
    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
 
        //獲取當(dāng)前請(qǐng)求的實(shí)例集合
        List<Server> reachableServers = loadBalancer.getReachableServers();
 
        //使用線程安全生成一個(gè)隨機(jī)數(shù)
        int i = ThreadLocalRandom.current().nextInt(reachableServers.size());
 
        //獲取服務(wù)
        Server server = reachableServers.get(i);
 
 
        return server;
    }
}

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

stock-service.ribbon.NFLoadBalancerRuleClassName=com.rule.CustomRule

(3)開(kāi)啟ribbon饑餓加載

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

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

#開(kāi)啟ribbon饑餓加載
ribbon.eager-load.enabled=true
#饑餓加載是服務(wù),多個(gè)使用逗號(hào)隔開(kāi)
ribbon.eager-load.clients=stock-service

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

4.使用spring cloud loadbalancer替代ribbon

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

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

  <!-- 添加loadbalancer依賴-->
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

(3)創(chuàng)建RestTemplate時(shí),需要加@LoadBalanced

//程序啟動(dòng)時(shí)創(chuàng)建RestTemplate
    //使用注解LoadBalanced標(biāo)識(shí)負(fù)載均衡,默認(rèn)輪詢的方式
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate build = builder.build();
        return build;
    }

(4)application.properties中禁用ribbon

#禁用ribbon
spring.cloud.loadbalancer.ribbon.enabled=false

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

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

相關(guān)文章

最新評(píng)論