柚子快報(bào)邀請(qǐng)碼778899分享:Ribbon負(fù)載均衡【微服務(wù)】
文章目錄
前言一、關(guān)于負(fù)載均衡二、負(fù)載均衡+遠(yuǎn)程RPC調(diào)用三、Ribbon默認(rèn)負(fù)載輪詢算法原理總結(jié)參考資料
前言
Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具。 Ribbon是Netflix發(fā)布的開源項(xiàng)目,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí),重試等。 在配置文件中列出Load Balancer(簡稱LB)后面所有的機(jī)器,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則(如簡單輪詢,隨機(jī)連接等)去連接這些機(jī)器。我們很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法。
一、關(guān)于負(fù)載均衡
1、LB負(fù)載均衡(Load Balance)是什么 就是將用戶的請(qǐng)求平攤的分配到多個(gè)服務(wù)上,從而達(dá)到系統(tǒng)的HA (高可用)。
常見的負(fù)載均衡有軟件Nginx,LVS,硬件F5等。
Ribbon本地負(fù)載均衡客戶端VS Nginx服務(wù)端負(fù)載均衡區(qū)別 Nginx是服務(wù)器負(fù)載均衡,客戶端所有請(qǐng)求都會(huì)交給nginx,然后由nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)請(qǐng)求。即負(fù)載均衡是由服務(wù)端實(shí)現(xiàn)的。 Ribbon本地負(fù)載均衡,在調(diào)用微服務(wù)接口時(shí)候,會(huì)在注冊(cè)中心上獲取注冊(cè)信息服務(wù)列表之后緩存到JVM本地,從而在本地實(shí)現(xiàn)RPC遠(yuǎn)程服務(wù)調(diào)用技術(shù)。
集中式LB
即在服務(wù)的消費(fèi)方和提供方之間使用獨(dú)立的LB設(shè)施(可以是硬件,如F5, 也可以是軟件,如nginx),由該設(shè)施負(fù)責(zé)把訪問請(qǐng)求通過某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方;
進(jìn)程內(nèi)LB
將LB邏輯集成到消費(fèi)方,消費(fèi)方從服務(wù)注冊(cè)中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個(gè)合適的服務(wù)器。
Ribbon就屬于進(jìn)程內(nèi)LB,它只是一個(gè)類庫,集成于消費(fèi)方進(jìn)程,消費(fèi)方通過它來獲取到服務(wù)提供方的地址。
二、負(fù)載均衡+遠(yuǎn)程RPC調(diào)用
負(fù)載均衡+RestTemplate
Ribbon在工作時(shí)分成兩步:
第一步先選擇EurekaServer ,它優(yōu)先選擇在同一個(gè)區(qū)域內(nèi)負(fù)載較少的server。
第二步再根據(jù)用戶指定的策略,在從server取到的服務(wù)注冊(cè)列表中選擇一個(gè)地址。
三、Ribbon默認(rèn)負(fù)載輪詢算法原理
默認(rèn)負(fù)載輪訓(xùn)算法: rest接口第幾次請(qǐng)求數(shù) % 服務(wù)器集群總數(shù)量 = 實(shí)際調(diào)用服務(wù)器位置下標(biāo),每次服務(wù)重啟動(dòng)后rest接口計(jì)數(shù)從1開始。
如:
List [0] instances = 127.0.0.1:8002 List [1] instances = 127.0.0.1:8001 8001+ 8002組合成為集群,它們共計(jì)2臺(tái)機(jī)器,集群總數(shù)為2,按照輪詢算法原理:
當(dāng)總請(qǐng)求數(shù)為1時(shí):1%2=1對(duì)應(yīng)下標(biāo)位置為1,則獲得服務(wù)地址為127.0.0.1:8001 當(dāng)總請(qǐng)求數(shù)位2時(shí):2%2=О對(duì)應(yīng)下標(biāo)位置為0,則獲得服務(wù)地址為127.0.0.1:8002 當(dāng)總請(qǐng)求數(shù)位3時(shí):3%2=1對(duì)應(yīng)下標(biāo)位置為1,則獲得服務(wù)地址為127.0.0.1:8001 當(dāng)總請(qǐng)求數(shù)位4時(shí):4%2=О對(duì)應(yīng)下標(biāo)位置為0,則獲得服務(wù)地址為127.0.0.1:8002 如此類推…
總結(jié)
全都是在調(diào)用服務(wù)(80)中添加 1、添加依賴 spring-cloud-starter-netflix-eureka-client自帶了spring-cloud-starter-ribbon引用。 應(yīng)用了spring-cloud-starter-netflix-eureka-client不需要再導(dǎo)入ribbon
2、使用@LoadBalanced注解賦予RestTemplate負(fù)載均衡的能力
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced//使用@LoadBalanced注解賦予RestTemplate負(fù)載均衡的能力
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
如果需要替換默認(rèn)的負(fù)載均衡算法,不需要加此注解 可以在調(diào)用服務(wù)的主啟動(dòng)類添加注解 @RibbonClient(name = “CLOUD-PAYMENT-SERVICE”, configuration = MySelfRule.class) MySelfRule為自定義負(fù)載均衡算法 需要注意: 定義配置類不能放在@ComponentScan所掃描的當(dāng)前包下以及子包下, 否則我們自定義的這個(gè)配置類就會(huì)被所有的Ribbon客戶端所共享,達(dá)不到特殊化定制的目的了。 (也就是說不要將Ribbon配置類與主啟動(dòng)類同包)
參考資料
https://blog.csdn.net/u011863024/article/details/114298270
柚子快報(bào)邀請(qǐng)碼778899分享:Ribbon負(fù)載均衡【微服務(wù)】
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。