目錄
前言
在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務調用方式,一種是ribbon+restTemplate,另一種是feign。在這一篇文章首先講解下基於ribbon+rest。
Ribbon是什麼?
- 官網:Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using
@FeignClient
then this section also applies. - Spring Cloud Ribbon是Netflix Ribbon實現的一套 客戶端 負載均衡的工具
- 簡單的說,Ribbon是Netflix發佈的開源醒目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起,Ribbon客戶端組件提供一系列完善的配置項如連接超時等,重試等。見到那的說,就是在配置文件中列出Load Balancer(簡稱LB)後面所有的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨機連接等)去連接這些機器,我們也很容易使用Ribbon實現自定義的負載均衡算法。
能幹嘛?LB(負載均衡)
- 負載均衡,在微服務或分佈式集羣中經常用的一種應用
- 把用戶的請求平攤的發呢配到多個服務上,從而達到系統的HA(高可用)
- dubbo和SpringCloud中均提供了負載均衡,SpringCloud的負載均衡算法可以自定義
集中式LB:
即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬件,如F5, 也可以是軟件,如nginx), 由該設施負責把訪問請求通過某種策略轉發至服務的提供方
進程內LB(Ribbon):
將LB邏輯集成到消費方,消費方從服務註冊中心獲知有哪些地址可用,然後自己再從這些地址中選擇出一個合適的服務器。Ribbon就屬於進程內LB,它只是一個類庫,集成於消費方進程,消費方通過它來獲取到服務提供方的地址。
- Ribbon和Eureka整合後Consumer可以直接調用服務而不用再關心地址和端口號
輪詢方式
- @LoadBalanced//Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端默認輪詢,一個服務一次
Ribbon核心組件IRule輪詢方式
- IRule:根據特定算法中從服務列表中選取一個要訪問的服務
- RoundRobinRule:輪詢
- RandomRule:隨機
- AvaliabilityFilterRule
- WeightedResponseTimeRule
- RetryRule
- BestAvaliableRule
- ZoneAvoidanceRule
IRule架構圖
自定義輪詢
怎麼搭建?
參考博客: 史上最簡單的SpringCloud教程 | 第二篇: 服務消費者(rest+ribbon)(Finchley版本)