欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:java Ribbon負(fù)載均衡

柚子快報激活碼778899分享:java Ribbon負(fù)載均衡

http://yzkb.51969.com/

引言

做核酸,一開始一個隊,隊很長速度很慢;后續(xù)做了相關(guān)優(yōu)化,多個隊做核酸,這樣比之前速度增加了,比較快,但還有問題一些,如有的隊長,有的隊短,這樣又做了一次優(yōu)化;加了協(xié)調(diào)人員,由協(xié)調(diào)人員安排到哪個隊作核酸,保證每個隊人數(shù)差不多,避免有一些隊出現(xiàn)擁擠的情況。

問題

provider服務(wù):由于特定原因需要增加服務(wù),provider服務(wù)做集群,consumer服務(wù)調(diào)用多個provider服務(wù)存在調(diào)用一些問題:

1、consumer服務(wù)怎么能調(diào)用到所有的provider服務(wù)

2、怎么實現(xiàn)服務(wù)的負(fù)載均衡

provider服務(wù)集群實現(xiàn)負(fù)載均衡

1、provider服務(wù)返回信息增加端口來區(qū)分調(diào)用哪個服務(wù)

@RestController

public class ProviderController {

@Value("${server.port}")

private String port;

@RequestMapping(value = "/provider/{id}")

public String provider(@PathVariable String id){

return "provider id = " + id + " port = " + port;

}

}

2、provider服務(wù)啟動兩次,第二次啟動修改端口,

Eureka-server監(jiān)控面板:

4、訪問http://localhost:8280/consumerRestDiscovery/1,運行結(jié)果

我們啟動了兩個provider,然后通過DiscoveryClient來獲取服務(wù)實例信息,然后獲取ip和端口來訪問。

多次訪問發(fā)現(xiàn)無法訪問到兩個provider服務(wù)接口,只能返回一個provider服務(wù)接口信息。

3、解決方案:

硬件負(fù)載均衡:比如 F5、深信服、Array 等;

軟件負(fù)載均衡:比如 Nginx、LVS、HAProxy 等;

硬件負(fù)載均衡或是軟件負(fù)載均衡,都會維護(hù)一個可用的服務(wù)端清單,通過心跳檢測來剔除故障的服務(wù)端節(jié)點以保證清單中都是可以正常訪問的服務(wù)端節(jié)點。當(dāng)客戶端發(fā)送請求到負(fù)載均衡設(shè)備的時候,該設(shè)備按某種算法(比如輪詢、權(quán)重、 最小連接數(shù)等)從維護(hù)的可用服務(wù)端清單中取出一臺服務(wù)端的地址,然后進(jìn)行轉(zhuǎn)發(fā)。

Ribbon

Eureka幫我們集成了負(fù)載均衡組件:Ribbon,簡單修改代碼即可使用。

什么是Ribbon:客戶端負(fù)載均衡組件

開啟負(fù)載均衡

1、Eureka中已經(jīng)集成了Ribbon,所以我們無需引入新的依賴,直接修改代碼。

2、spring-consumer的引導(dǎo)類,在RestTemplate的配置方法上添加@LoadBalanced注解

@Bean

@LoadBalanced //不添加這個注解,不能直接用服務(wù)名訪問

public RestTemplate getRestTemplate(RestTemplateBuilder builder){

return builder.build();

}

3、修改調(diào)用方式,不再手動獲取ip和端口,而是直接通過服務(wù)名稱調(diào)用:

@RestController

public class UserController {

@Autowired

private RestTemplate restTemplate;

@RequestMapping(value = "/consumerLoadBalanced/{id}")

public String consumerLoadBalanced(@PathVariable String id){

String url = "http://spring-provider/provider/" + id;

String consumer = restTemplate.getForObject(url, String.class);

return "LoadBalanced restTemplate consumer " + consumer;

}

}

4、運行結(jié)果:

第一次調(diào)用結(jié)果

第二調(diào)用結(jié)果

Ribbon 的超時和超時重試

Ribbon 是有超時設(shè)置,以及超時之后的重試功能的。但是,在 RestTemplate 和 Ribbon 結(jié)合的方案中,Ribbon 的超時設(shè)置和重試設(shè)置的配置方式一直在變動,因此有很多『配置無效』的現(xiàn)象,十分詭異。

考慮到我們在后續(xù)的項目中不會使用 RestTemplate 和 Ribbon 整合,而是使用 OpenFeign ,因此,這里就不展開解釋了。

Ribbon 的饑餓加載

默認(rèn)情況下,服務(wù)消費方調(diào)用服務(wù)提供方接口的時候,第一次請求會慢一些,甚至?xí)瑫r,而之后的調(diào)用就沒有問題了。

這是因為 Ribbon 進(jìn)行客戶端負(fù)載均衡的 Client 并不是在服務(wù)啟動的時候就初始化好的,而是在調(diào)用的時候才會去創(chuàng)建相應(yīng)的 Client,所以第一次調(diào)用的耗時不僅僅包含發(fā)送HTTP請求的時間,還包含了創(chuàng)建 RibbonClient 的時間,這樣一來如果創(chuàng)建時間速度較慢,同時設(shè)置的超時時間又比較短的話,很容易就會出現(xiàn)上面所描述的現(xiàn)象。

你可以通過啟用 Ribbon 的饑餓加載(即立即加載)模式,并指定在項目啟動時就要加載的服務(wù):

ribbon:

eager-load:

enabled: true # 開啟饑餓加載

clients: spring-provider, xxx # (服務(wù)名)需要饑餓加載的服務(wù)

負(fù)載均衡策略

Ribbon 內(nèi)置了 7 種負(fù)載均衡策略,它們都直接或間接實現(xiàn)了 IRule 接口:

https://blog.csdn.net/weixin_45717638/article/details/120111957

https://blog.csdn.net/m0_70565884/article/details/124929627

1.輪詢策略

輪詢策略:RoundRobinRule,按照一定的順序依次調(diào)用服務(wù)實例。比如一共有 3 個服務(wù),第一次調(diào)用服務(wù) 1,第二次調(diào)用服務(wù) 2,第三次調(diào)用服務(wù) 3,依次類推。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #設(shè)置負(fù)載均衡

格式是:{服務(wù)名稱}.ribbon.NFLoadBalancerRuleClassName,值就是IRule的實現(xiàn)類。

2.權(quán)重策略

權(quán)重策略:WeightedResponseTimeRule,根據(jù)每個服務(wù)提供者的響應(yīng)時間分配一個權(quán)重,響應(yīng)時間越長,權(quán)重越小,被選中的可能性也就越低。它的實現(xiàn)原理是,剛開始使用輪詢策略并開啟一個計時器,每一段時間收集一次所有服務(wù)提供者的平均響應(yīng)時間,然后再給每個服務(wù)提供者附上一個權(quán)重,權(quán)重越高被選中的概率也越大。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

3.隨機策略

隨機策略:RandomRule,從服務(wù)提供者的列表中隨機選擇一個服務(wù)實例。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

4.最小連接數(shù)策略

最小連接數(shù)策略:BestAvailableRule,也叫最小并發(fā)數(shù)策略,它是遍歷服務(wù)提供者列表,選取連接數(shù)最小的?個服務(wù)實例。如果有相同的最小連接數(shù),那么會調(diào)用輪詢策略進(jìn)行選取。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #設(shè)置負(fù)載均衡

5.重試策略

重試策略:RetryRule,按照輪詢策略來獲取服務(wù),如果獲取的服務(wù)實例為 null 或已經(jīng)失效,則在指定的時間之內(nèi)不斷地進(jìn)行重試來獲取服務(wù),如果超過指定時間依然沒獲取到服務(wù)實例則返回 null。此策略的配置設(shè)置如下:

ribbon:

ConnectTimeout: 2000 # 請求連接的超時時間

ReadTimeout: 5000 # 請求處理的超時時間

spring-provider: # nacos 中的服務(wù) id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #設(shè)置負(fù)載均衡

6.可用性敏感策略

可用敏感性策略:AvailabilityFilteringRule,先過濾掉非健康的服務(wù)實例,然后再選擇連接數(shù)較小的服務(wù)實例。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule

7.區(qū)域敏感策略

區(qū)域敏感策略:ZoneAvoidanceRule,根據(jù)服務(wù)所在區(qū)域(zone)的性能和服務(wù)的可用性來選擇服務(wù)實例,在沒有區(qū)域的環(huán)境下,該策略和輪詢策略類似。此策略的配置設(shè)置如下:

spring-provider: # nacos中的服務(wù)id

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

Ribbon與Nginx的區(qū)別

Nginx是基于服務(wù)端的負(fù)載均衡,客戶端所有請求統(tǒng)一交給 nginx,由 nginx 進(jìn)行實現(xiàn)負(fù)載均衡請求轉(zhuǎn)發(fā),Nginx保持服務(wù)清單的同時,也負(fù)責(zé)負(fù)載均衡算法

Ribbon是從 eureka 注冊中心服務(wù)器端上獲取服務(wù)注冊信息列表,緩存到本地,然后在本地實現(xiàn)輪詢負(fù)載均衡策略,Ribbon不負(fù)責(zé)出來服務(wù)清單,

應(yīng)用場景的區(qū)別:

1、Nginx適合于服務(wù)器端實現(xiàn)負(fù)載均衡比如 Tomcat ,Ribbon適合與在微服務(wù)中RPC遠(yuǎn)程調(diào)用實現(xiàn)本地服務(wù)負(fù)載均衡,比如 Dubbo、SpringCloud 中都是采用本地負(fù)載均衡。

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

2、Ribbon

是一個基于 HTTP 和 TCP 客戶端的負(fù)載均衡器,可以在客戶端配置 ribbonServerList(服務(wù)端列表),然后輪詢請求以實現(xiàn)均衡負(fù)載。

3、springcloud的ribbon和nginx有什么區(qū)別?哪個性能好?nginx性能好,但ribbon可以剔除不健康節(jié)點,nginx剔除節(jié)點比較復(fù)雜。ribbon還可以配合熔斷器一起工作;

ribbon是客戶端負(fù)載均衡,nginx是服務(wù)端負(fù)載均衡??蛻舳素?fù)載均衡,所有客戶端節(jié)點都維護(hù)自己要訪問的服務(wù)端清單。服務(wù)端負(fù)載均衡的軟件模塊會維護(hù)一個可用的服務(wù)清單;

ribbon 是一個客戶端負(fù)載均衡器,可以簡單的理解成類似于 nginx的負(fù)載均衡模塊的功能。

柚子快報激活碼778899分享:java Ribbon負(fù)載均衡

http://yzkb.51969.com/

推薦鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18937332.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄