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

目錄

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

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

http://yzkb.51969.com/

引言

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

問(wèn)題

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

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

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

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

1、provider服務(wù)返回信息增加端口來(lái)區(qū)分調(diào)用哪個(gè)服務(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ù)啟動(dòng)兩次,第二次啟動(dòng)修改端口,

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

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

我們啟動(dòng)了兩個(gè)provider,然后通過(guò)DiscoveryClient來(lái)獲取服務(wù)實(shí)例信息,然后獲取ip和端口來(lái)訪問(wèn)。

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

3、解決方案:

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

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

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

Ribbon

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

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

開(kāi)啟負(fù)載均衡

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

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

@Bean

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

public RestTemplate getRestTemplate(RestTemplateBuilder builder){

return builder.build();

}

3、修改調(diào)用方式,不再手動(dòng)獲取ip和端口,而是直接通過(guò)服務(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、運(yùn)行結(jié)果:

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

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

Ribbon 的超時(shí)和超時(shí)重試

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

考慮到我們?cè)诤罄m(xù)的項(xiàng)目中不會(huì)使用 RestTemplate 和 Ribbon 整合,而是使用 OpenFeign ,因此,這里就不展開(kāi)解釋了。

Ribbon 的饑餓加載

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

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

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

ribbon:

eager-load:

enabled: true # 開(kāi)啟饑餓加載

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

負(fù)載均衡策略

Ribbon 內(nèi)置了 7 種負(fù)載均衡策略,它們都直接或間接實(shí)現(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ù)實(shí)例。比如一共有 3 個(gè)服務(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的實(shí)現(xiàn)類。

2.權(quán)重策略

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

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

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

3.隨機(jī)策略

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

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

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

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

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

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

ribbon:

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

5.重試策略

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

ribbon:

ConnectTimeout: 2000 # 請(qǐng)求連接的超時(shí)時(shí)間

ReadTimeout: 5000 # 請(qǐng)求處理的超時(shí)時(shí)間

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

ribbon:

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

6.可用性敏感策略

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

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

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule

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

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

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

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

Ribbon與Nginx的區(qū)別

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

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

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

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

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

2、Ribbon

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

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

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

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

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

http://yzkb.51969.com/

推薦鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

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

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

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

發(fā)布評(píng)論

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

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄