springcloud(十二):Ribbon客戶端負載均衡介紹算法
Ribbon簡介
使用分佈式微服務腳骨的應用系統,在部署的時候一般會爲部分或者所有微服務搭建集羣環境,經過提供多個實例來提升系統的穩定型。既然有多個服務實例,那麼調用的時候應該若是選擇呢?這就須要實現必定的負載均衡策略。spring
實現負載均衡主要有兩種方式,第一種是經過服務端進行負載均衡,第二種是經過客戶端進行負載均衡。服務端方式的實現原理是經過反向代理並按照某種負載均衡策略把客戶端請求分發到可用的服務端節點上,如Nginx。客戶端方式的實現原理是在客戶端先獲取全部可用的服務端節點,再經過某種負載均衡策略選擇其中一個節點進行訪問。api
Ribbon就是一種客戶端負載均衡的實現,它是有Netflix發佈的一個基於HTTP和TCP的客戶端負載均衡工具。服務消費者繼承Ribbon後,只須要配置服務提供者地址,Ribbon就能夠基於指定的負載均衡算法,自動幫服務消費者分配請求。Ribbon提供了不少常見的負載均衡算法,入輪詢、隨機、權重等。做爲Spring Cloud體系中的一員,Ribbon能夠和Eureka方便地集合使用,能夠直接從Eureka Server中獲取全部服務提供者的節點地址,而後根據指定的負載均衡策略選擇某個節點進行訪問。緩存
Ribbon是一個在雲服務中久經沙場的客戶端IPC庫,它提供如下的一些特性:服務器
- 負載均衡
- 故障容錯
- 在異步和動態的模型中支持多協議通信(HTTP、TCP、UDP)
- 緩存與批處理
引入Ribbon依賴架構
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
Ribbon所包含的模塊
- ribbon:在其餘Ribbon模塊和Hystrix上集成負載均衡、容錯、緩存/批處理的api
- ribbon-loadbalancer:能夠獨立或與其餘模塊一塊兒使用的負載均衡器的api
- ribbon-eureka:使用Eureka客戶端爲雲提供動態服務器列表的api
- ribbon-transport:使用帶有負載均衡功能的RxNetty支持HTTP、TCP和UDP協議的傳輸客戶端
- ribbon-httpclient:構建在Apache HttpClient之上,與負載均衡器集成的REST客戶端
- ribbon-example:提供了一些示例
- ribbon-core:客戶端配置api和其餘共享api
負載均衡器組件
Ribbon提供的基本功能
- 向通訊客戶端提供公共DNS名稱或單個服務器的IP
- 根據特定的邏輯選擇服務器
Ribbon提供的高級功能
- 經過將客戶端劃分爲區域(如數據中心的機架),在相同區域中減小服務器延遲,從而在客戶端和服務器之間創建關聯
- 保持服務器的統計信息,避免出現高延遲或頻繁故障的服務器
- 保持區域的統計信息,避免可能出現停機的區域
負載均衡器的三大子模塊
- Rule:肯定從列表返回哪一個服務的邏輯組件
- Ping:在後臺運行的組件以確保服務的活躍度
- ServerList:這能夠是靜態的或動態的。若是它是動態的(由DynamicServerListLoadBalancer使用),後臺線程將在特定的時間間隔刷新和過濾列表
建立Ribbon程序
如架構圖所示,Ribbon充當負載均衡器的做用,可以讓咱們的服務消費者調用到本身想使用的服務,服務消費者不用關心中間具體的操做,只須要將要調用的服務信息告訴負載均衡器,Ribbon就會從相應的服務集羣中選擇一個能夠使用的服務器,供服務消費者調用。
併發
負載均衡策略
- WeightedResponseTimeRule:根據響應時間分配一個weight(權重),響應時間越長,weight越小,被選中的可能性越低。
- RoundRobinRule:輪詢選擇服務節點(此爲默認的負載均衡策略)。
- RandomRule:隨機選擇一個服務節點。
- ZoneAvoidanceRule:綜合考慮服務節點所在區域的性能和服務節點的可用性來選擇服務節點。
- RetryRule:重試機制。在一個配置時間段內,當選擇服務節點不成功時會一直嘗試從新選擇。
- BestAvailableRule:選擇一個併發請求最小的服務節點。
- AvailabilityFilteringRule:過濾掉那些由於一直鏈接失敗而被標記爲circuit tripped的服務節點和那些高併發的服務節點(active connections 超過配置值)
轉載請註明出處:https://blog.csdn.net/MrSpirit/article/details/80182508負載均衡