Ribbon,負載均衡簡介,Ribbon架構,IRULE的7種默認算法


Ribbon簡介
Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端負載均衡的工具。
 
簡單的說,Ribbon是Netflix發布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨機連接等)去連接這些機器。我們也很容易使用Ribbon實現自定義的負載均衡算法。

負載均衡
LB,即負載均衡(Load Balance),在微服務或分布式集群中經常用的一種應用。

負載均衡簡單的說就是將用戶的請求平攤的分配到多個服務上,從而達到系統的HA。

常見的負載均衡有軟件Nginx,LVS,硬件 F5等。

相應的在中間件,例如:dubbo和SpringCloud中均給我們提供了負載均衡,SpringCloud的負載均衡算法可以自定義。 

集中式LB

即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬件,如F5, 也可以是軟件,如nginx), 由該設施負責把訪問請求通過某種策略轉發至服務的提供方;

進程內LB

將LB邏輯集成到消費方,消費方從服務注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的服務器。

Ribbon就屬於進程內LB,它只是一個類庫,集成於消費方進程,消費方通過它來獲取到服務提供方的地址。

Ribbon架構

 

 

Ribbon在工作時分成兩步

第一步先選擇 EurekaServer ,它優先選擇在同一個區域內負載較少的server.

第二步再根據用戶指定的策略,在從server取到的服務注冊列表中選擇一個地址。

其中Ribbon提供了多種策略:比如輪詢、隨機和根據響應時間加權。

總結:Ribbon其實就是一個軟負載均衡的客戶端組件,他可以和其他所需請求的客戶端結合使用,和eureka結合只是其中的一個實例

IRULE的7種默認算法
IRule:根據特定算法中從服務器列表中選取一個要訪問的服務,Ribbon默認的算法為輪詢算法;

Ribbon中的7中負載均衡算法:

(1)RoundRobinRule:輪詢;

(2)RandomRule:隨機;

(3)AvailabilityFilteringRule:會先過濾掉由於多次訪問故障而處於斷路器狀態的服務,還有並發的連接數量超過閾值的服務,然后對剩余的服務列表按照輪詢策略進行訪問;

(4)WeightedResponseTimeRule:根據平均響應時間計算所有服務的權重,響應時間越快的服務權重越大被選中的概率越大。剛啟動時如果統計信息不足,則使用RoundRobinRule(輪詢)策略,等統計信息足夠,會切換到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(輪詢)策略獲取服務,如果獲取服務失敗則在指定時間內進行重試,獲取可用的服務;

(6)BestAvailableRule:會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,然后選擇一個並發量最小的服務;

(7)ZoneAvoidanceRule:復合判斷Server所在區域的性能和Server的可用性選擇服務器;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM