Java Ribbon負(fù)載均衡詳細(xì)講解
介紹
Spring Cloud Ribbon是基于Netflix Ribbon實現(xiàn)的一套客戶端負(fù)載均衡的工具。Ribbon是Netflix發(fā)布的開源項目,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。
簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機器,Ribbon會自動的幫助你基于某種規(guī)則(如簡單輪詢,隨機連接等)去連接這些機器。我們很容易使用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 隨機
- RetryRule 先按照RoundRobinRule的策略獲取服務(wù),如果獲取服務(wù)失敗則在指定時間內(nèi)會進(jìn)行重試
- WeightedResponseTimeRule 對RoundRobinRule的擴展,響應(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)文章
maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決
這篇文章主要介紹了maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Spring中BeanUtils.copyProperties的坑及解決
這篇文章主要介紹了Spring中BeanUtils.copyProperties的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Java Spring Boot消息服務(wù)萬字詳解分析
在實際項目開發(fā)中,有時需要與其他系統(tǒng)進(jìn)行集成完成相關(guān)業(yè)務(wù)功能,這種情況最原始做法是程序內(nèi)部相互調(diào)用,除此之外,還可以用消息服務(wù)中間件進(jìn)行業(yè)務(wù)處理,用消息服務(wù)中間件處理業(yè)務(wù)能夠提升系統(tǒng)的異步通信和擴展解耦能力。Spring Boot對消息服務(wù)管理提供了非常好的支持2021-10-10Java9 Stream Collectors新增功能(小結(jié))
這篇文章主要介紹了Java9 Stream Collectors新增功能(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12