一:關于Ribbon
Spring Cloud Ribbon是基于Netflix Ribbon實作的一套客戶端 負載均衡的工具,
簡單的說,Ribbon是Netflix發布的開源專案,主要功能是提供客戶端的軟體負載均衡演算法和服務呼叫,Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等,簡單的說,就是在組態檔中列出Load Balancer(簡稱LB)后面所有的機器,Ribbon會自動的幫助你基于某種規則(如簡單輪詢,隨機連接等)去連接這些機器,我們很容易使用Ribbon實作自定義的負載均衡演算法,
Ribbon負載均衡演示(架構說明)

Ribbon在作業時分成兩步
第一步先選擇 EurekaServer ,它優先選擇在同一個區域內負載較少的server.
第二步再根據用戶指定的策略,在從server取到的服務注冊串列中選擇一個地址,
其中Ribbon提供了多種策略:比如輪詢、隨機和根據回應時間加權,
總結:Ribbon其實就是一個軟負載均衡的客戶端組件,他可以和其他所需請求的客戶端結合使用,和eureka結合只是其中的一個實體,
二:關于負載均衡(LB)
1.LB(負載均衡)
1)LB負載均衡(Load Balance)是什么
簡單的說就是將用戶的請求平攤的分配到多個服務上,從而達到系統的HA(高可用),
常見的負載均衡有軟體Nginx,LVS,硬體 F5等,
2)Ribbon本地負載均衡客戶端 VS Nginx服務端負載均衡區別
Nginx是服務器負載均衡,客戶端所有請求都會交給nginx,然后由nginx實作轉發請求,即負載均衡是由服務端實作的,
Ribbon本地負載均衡,在呼叫微服務介面時候,會在注冊中心上獲取注冊資訊服務串列之后快取到JVM本地,從而在本地實作RPC遠程服務呼叫技術,
3)集中式LB
即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬體,如F5, 也可以是軟體,如nginx), 由該設施負責把訪問請求通過某種策略轉發至服務的提供方;
4)行程內LB
將LB邏輯集成到消費方,消費方從服務注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的服務器,
Ribbon就屬于行程內LB,它只是一個類別庫,集成于消費方行程,消費方通過它來獲取到服務提供方的地址,
三:怎么用Ribbon
負載均衡+RestTemplate呼叫
之前寫樣例時候沒有引入spring-cloud-starter-ribbon也可以使用ribbon,
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
spring-cloud-starter-netflix-eureka-client自帶了spring-cloud-starter-ribbon參考,
點進spring-cloud-starter-netflix-eureka-client看到確實引入了Ribbon,
四:RestTemplate的使用

1. getForObject方法/getForEntity方法:
1)回傳物件為回應體中資料轉化成的物件,基本上可以理解為Json

2)回傳物件為ResponseEntity物件,包含了回應中的一些重要資訊,比如回應頭、回應狀態碼、回應體等

2.postForObject/postForEntity

五: Ribbon核心組件IRule
IRule:根據特定演算法中從服務串列中選取一個要訪問的服務

1. com.netflix.loadbalancer.RoundRobinRule(輪詢)
2.com.netflix.loadbalancer.RandomRule(隨機)
3.com.netflix.loadbalancer.RetryRule
(先按照RoundRobinRule的策略獲取服務,如果獲取服失敗則在指定時間內會進行重試,獲取可 用的服務)
4.WeightedResponseTimeRule
(對RoundRobinRule的擴展,回應速度越快的實體選擇權重越大,越容易被選擇)
5.BestAvailableRule
(會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態的服務,然后選擇一個并發量最小的服務)
6.AvailabilityFilteringRule
(先過濾掉故障實體,再選擇并發較小的實體)
7.ZoneAvoidanceRule
(默認規則,復合判斷server所在區域的性能和server的可用性選擇服務器)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294173.html
標籤:其他
