三、什么Ribbon?
- Ribbon是基于Netflix ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具。簡(jiǎn)單的說,Ribbon是Netflixf發(fā)布的開源項(xiàng)目,主要功能是提供醍醐的的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如:連接超時(shí),重試等。簡(jiǎn)單的說,就是在配置文件中列出Load Balancer(簡(jiǎn)稱LB)后面所有的機(jī)器,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則
(如簡(jiǎn)單輪詢、隨機(jī)連接等)去連接這些機(jī)器。我們很容易的使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法。
三、Ribbon能做什么?
1)Ribbon 是Spring Cloud 負(fù)載均衡器。
2)Ribbon 是 Netflix 發(fā)布的開源項(xiàng)目。
3)Ribbon 主要功能是提供客戶端的軟件負(fù)載均衡算法。
4)Ribbon 將 Netflix 的中間層服務(wù)連接在一起。
5)Ribbon 客戶端組件提供許多配置如連接超時(shí),重試等。
6)配置文件中列出后臺(tái)所有的機(jī)器。
7)Ribbon 會(huì)自動(dòng)(如簡(jiǎn)單輪詢,隨即連接等)去連接這些機(jī)器。
8)Spring Cloud 使用 Ribbon 實(shí)現(xiàn) 自定義的負(fù)載均衡算法。
三、Load Balance負(fù)載均衡是什么?
- 簡(jiǎn)單的說就是講用戶的請(qǐng)求平攤分配到多個(gè)服務(wù)上,從而達(dá)到系統(tǒng)的HA(高可用)。常見的負(fù)載均衡軟件有Nginx、LVS,硬件有F5等。
四、Ribbon本地負(fù)載均衡客戶端與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和進(jìn)程內(nèi)LB分別是什么?
- 集中式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ù)器提供方的地址。
六、Ribbon默認(rèn)自帶的負(fù)載規(guī)則?
- RoundRobinRule 輪詢
- RandomRule 隨機(jī)
- RetryRule 先按照RoundRobinRule的策略獲取服務(wù),如果獲取服務(wù)失敗則在指定時(shí)間內(nèi)會(huì)進(jìn)行重
- WeightedResponseTimeRule 對(duì)RoundRobinRule的擴(kuò)展,響應(yīng)速度越快的實(shí)例選擇權(quán)重越大,越容易被選擇
- BestAvailableRule 會(huì)先過濾掉由于多次訪問故障而處于斷路器跳閘狀態(tài)的服務(wù),然后選擇一個(gè)并發(fā)量最小的服務(wù)
- AvailabilityFilteringRule 先過濾掉故障實(shí)例,再選擇并發(fā)較小的實(shí)例
- ZoneAvoidanceRule 默認(rèn)規(guī)則,復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇服務(wù)器
七、Ribbon 中的組件有哪些?
-
IRule 功能:根據(jù)特定算法中從服務(wù)列表中選取一個(gè)要訪問的服務(wù) 常用IRule實(shí)現(xiàn)
-
IPing 功能:在后臺(tái)運(yùn)行的一個(gè)組件,用于檢查服務(wù)列表是否都活
-
ServerList 功能:存儲(chǔ)服務(wù)列表。分為靜態(tài)和動(dòng)態(tài)。如果是動(dòng)態(tài)的,后臺(tái)有個(gè)線程會(huì)定時(shí)刷新和過濾服務(wù)列表
-
ServerListFilter 該接口允許過濾配置或動(dòng)態(tài)獲取的具有所需特性的服務(wù)器列表。ServerListFilter是DynamicServerListLoadBalancer用于過濾從ServerList實(shí)現(xiàn)返回的服務(wù)器的組件。
-
ServerListUpdater 功能:被DynamicServerListLoadBalancer用于動(dòng)態(tài)的更新服務(wù)列表。
-
IClientConfig 功能:定義各種配置信息,用來初始化ribbon客戶端和負(fù)載均衡器
-
ILoadBalancer 定義軟件負(fù)載平衡器操作的接口。動(dòng)態(tài)更新一組服務(wù)列表及根據(jù)指定算法從現(xiàn)有服務(wù)器列表中選擇一個(gè)服務(wù)
浙公網(wǎng)安備 33010602011771號(hào)