Ribbon概念
Spring Cloud Ribbon 是基于 Netflix Ribbon 實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具,主要功能是提供客戶端負(fù)載均衡算法和服務(wù)調(diào)用。簡(jiǎn)單的說(shuō),就是在配置文件中列出 Load Balance( LB:將用戶的請(qǐng)求平攤的分配到多個(gè)服務(wù)上)后面的所有機(jī)器,Ribbon 會(huì)自動(dòng)的幫助我們基于某種規(guī)則(如簡(jiǎn)單的輪詢,隨機(jī)、權(quán)重等)去連接這些機(jī)器。我們很容易使用 Ribbon 實(shí)現(xiàn)自定義的負(fù)載均衡算法
Nginx和Ribbon的區(qū)別
集中式 LB(Load Balancer)
即在服務(wù)的消費(fèi)方和提供方之間使用獨(dú)立的 LB 設(shè)備進(jìn)行負(fù)載均衡,比如nginx,由該設(shè)施負(fù)責(zé)把訪問(wèn)請(qǐng)求通過(guò)某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方。
進(jìn)程內(nèi) LB(Load Balancer)Ribbon 屬于進(jìn)程內(nèi) LB,將 LB(Load Balancer)邏輯集成到消費(fèi)方,消費(fèi)方從注冊(cè)中心那里獲知有哪些地址可以使用,然后自己再?gòu)倪@些地址中選擇出一個(gè)合適的服務(wù)器。
Nginx 是服務(wù)器負(fù)載均衡,客戶端所有請(qǐng)求都會(huì)交給 Nginx,然后由 Nginx 實(shí)現(xiàn)轉(zhuǎn)發(fā)請(qǐng)求
Ribbon 是本地負(fù)載均衡,在調(diào)用微服務(wù)接口的時(shí)候,會(huì)在注冊(cè)中心上獲取注冊(cè)信息服務(wù)列表之后通過(guò)策略調(diào)用服務(wù)
?Ribbon的負(fù)載均衡策略
Ribbon一共有7個(gè)負(fù)載均衡策略
RoundRobinRule :輪詢(默認(rèn)規(guī)則)
RandomRule: 隨機(jī)
RetryRule:重試(先按照 RoundRobinRule(輪詢)的策略獲取服務(wù),如果獲取服務(wù)失敗則在指定時(shí)間內(nèi)會(huì)進(jìn)行重試來(lái)獲取可用服務(wù))
WeightedResponseTimeRule:對(duì) RoundRobinRule 的擴(kuò)展,響應(yīng)速度越快的實(shí)例選擇權(quán)重越大,越容易被選擇
BestAvailableRule:首先會(huì)過(guò)濾掉由于多次訪問(wèn)故障而處于斷路器跳閘狀態(tài)的服務(wù),然后選擇一個(gè)并發(fā)量最小的服務(wù)
AvailabilityFilteringRule:先過(guò)濾掉故障實(shí)例,再選擇并發(fā)量較小的實(shí)例
ZoneAvoidanceRule:復(fù)合判斷服務(wù)所在區(qū)域的性能和服務(wù)的可用性選擇服務(wù)器
?默認(rèn)的輪詢負(fù)載均衡原理
輪詢的負(fù)載均衡算法:rest接口第幾次請(qǐng)求數(shù)量%服務(wù)器集群總數(shù)量= 實(shí)際調(diào)用的服務(wù)位置下標(biāo),?每次服務(wù)重啟動(dòng)后rest接口計(jì)數(shù)從1開(kāi)始
自定義負(fù)載均衡策略
注意:需要單獨(dú)建立一個(gè)包,不能與主啟動(dòng)類在同一個(gè)包以及子包下
這個(gè)自定義配置類不能放在@ComponentScan所掃描的當(dāng)前包下以及子包下,否則我們自定義的這個(gè)配置類就會(huì)被所有的Ribbon客戶端所共享,達(dá)不到特殊化定制的目的
@Configuration
public class MyTestRule {
@Bean
public IRule myRule(){
return new RandomRule(); // 定義為隨機(jī)策略
}
}
在主啟動(dòng)類上加 @RibbonClient 注解:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-519925.html
// name:指明需要調(diào)用的服務(wù)名
// configuration:在啟動(dòng)該微服務(wù)的時(shí)候就能去加載我們的自定義 Ribbon 負(fù)載均衡策略配置類
@RibbonClient(name = "cloud-test-service", configuration = MyTestRule.class)
public class TestMainApplication{
public static void main(String[] args) {
SpringApplication.run(TestMainApplication.class, args);
}
}
openfeign和nacos以及eureka都已經(jīng)自帶ribbon依賴,可以在客戶端負(fù)載均衡文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-519925.html
到了這里,關(guān)于spring cloud 之 ribbon的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!