Java Ribbon負(fù)載均衡詳細(xì)講解
介紹
Spring Cloud Ribbon是基于Netflix Ribbon實現(xiàn)的一套客戶端負(fù)載均衡的工具。Ribbon是Netflix發(fā)布的開源項目,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。
簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機(jī)器,Ribbon會自動的幫助你基于某種規(guī)則(如簡單輪詢,隨機(jī)連接等)去連接這些機(jī)器。我們很容易使用Ribbon實現(xiàn)自定義的負(fù)載均衡算法。其實就是負(fù)載均衡 + RestTemplate調(diào)用 LB負(fù)載均衡(Load Balance)是什么
簡單的說就是將用戶的請求平攤的分配到多個服務(wù)上,從而達(dá)到系統(tǒng)的HA (高可用)。
常見的負(fù)載均衡有軟件Nginx,LVS,硬件F5等。 Ribbon本地負(fù)載均衡客戶端VS Nginx服務(wù)端負(fù)載均衡區(qū)別
Nginx是服務(wù)器負(fù)載均衡,客戶端所有請求都會交給nginx,然后由nginx實現(xiàn)轉(zhuǎn)發(fā)請求。即負(fù)載均衡是由服務(wù)端實現(xiàn)的。Ribbon本地負(fù)載均衡,在調(diào)用微服務(wù)接口時候,會在注冊中心上獲取注冊信息服務(wù)列表之后緩存到JVM本地,從而在本地實現(xiàn)RPC遠(yuǎn)程服務(wù)調(diào)用技術(shù)。
LB分類
集中式LB
即在服務(wù)的消費方和提供方之間使用獨立的LB設(shè)施(可以是硬件,如F5, 也可以是軟件,如nginx),由該設(shè)施負(fù)責(zé)把訪問請求通過某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方;
進(jìn)程內(nèi)LB
將LB邏輯集成到消費方,消費方從服務(wù)注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的服務(wù)器。
Ribbon就屬于進(jìn)程內(nèi)LB,它只是一個類庫,集成于消費方進(jìn)程,消費方通過它來獲取到服務(wù)提供方的地址。
Ribbon默認(rèn)自帶的負(fù)載規(guī)則

lRule:根據(jù)特定算法中從服務(wù)列表中選取一個要訪問的服務(wù)
- RoundRobinRule 輪詢
- RandomRule 隨機(jī)
- RetryRule 先按照RoundRobinRule的策略獲取服務(wù),如果獲取服務(wù)失敗則在指定時間內(nèi)會進(jìn)行重試
- WeightedResponseTimeRule 對RoundRobinRule的擴(kuò)展,響應(yīng)速度越快的實例選擇權(quán)重越大,越容易被選擇
- BestAvailableRule 會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態(tài)的服務(wù),然后選擇一個并發(fā)量最小的服務(wù)
- AvailabilityFilteringRule 先過濾掉故障實例,再選擇并發(fā)較小的實例
- ZoneAvoidanceRule 默認(rèn)規(guī)則,復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇服務(wù)器
Ribbon負(fù)載規(guī)則替換
@Configuration
public class MySelfRule {
@Bean
public IRule myRule(){
return new RandomRule();
}
}主啟動類
添加@RibbonClient
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)
public class OrderMain {
public static void main(String[] args) {
SpringApplication.run(OrderMain.class,args);
}
}Ribbon默認(rèn)負(fù)載輪詢算法原理
默認(rèn)負(fù)載輪訓(xùn)算法: rest接口第幾次請求數(shù) % 服務(wù)器集群總數(shù)量 = 實際調(diào)用服務(wù)器位置下標(biāo),每次服務(wù)重啟動后rest接口計數(shù)從1開始。
List<Servicelnstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");到此這篇關(guān)于Java Ribbon負(fù)載均衡詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java Ribbon 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA遠(yuǎn)程部署調(diào)試Java應(yīng)用程序的詳細(xì)流程
這篇文章主要介紹了IDEA遠(yuǎn)程部署調(diào)試Java應(yīng)用程序,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
Java中你真的會用Constructor構(gòu)造器嗎之看完本篇你就真的會了
顯式初始化要求我們在寫程序時就確定初始值,這有時很不方便。我們可以使用構(gòu)造器(constructor)來初始化對象。構(gòu)造器可以初始化數(shù)據(jù)成員,還可以規(guī)定特定的操作。這些操作會在創(chuàng)建對象時自動執(zhí)行。下面文字將對該內(nèi)容做詳細(xì)介紹,需要的小伙伴請參考2021-09-09

