Spring Cloud Ribbon ——服務消費者Client Side Load Balancer——what、why、how

目錄

前言

Ribbon是什麼?

能幹嘛?LB(負載均衡)

集中式LB:

進程內LB(Ribbon):

輪詢方式

Ribbon核心組件IRule輪詢方式

IRule架構圖

自定義輪詢

 怎麼搭建?


前言

 在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於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版本)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章