SpringCloud Ribbon
1.Ribbon介紹
1.1Ribbon是什么?
官網地址:Netflix/ribbon: Ribbon(github.com)
- SpringCloud Ribbon 是基于 Netflix Ribbon 實作的一套客戶端負載均衡的工具
- Ribbon 主要功能是提供客戶端負載均衡演算法和服務呼叫
- Ribbon 客戶端組件提供一系列完整的配置項如連接超時,重試等
- Ribbon 會基于某種規則(如簡單輪詢,隨機連接等)去連接指定服務
- 程式員很容易使用 Ribbon 的負載均衡軟法實作負載均衡
一句話:Ribbon = 負載均衡 + RestTemplate 呼叫
Ribbon 目前進入維護模式,未來替換方案 是 Spring Cloud LoadBalancer
1.2LB(Load Balance)-負載均衡
負載均衡(LB)的分類:
-
集中式LB
即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬體,如F5,也可以是軟體,如Nginx),由該設施負責把訪問的請求通過某種策略轉發至服務的提供方,
-
行程內LB
將LB邏輯集成到消費方,消費方從服務注冊中心獲知有哪些地址可用,然后再從這些地址中選擇出一個合適的服務地址,Ribbon就屬于行程內LB,它只是一個類別庫,集成于消費方行程,消費方通過它來獲取到服務提供方的地址,
前面 member-consumer 輪詢負載訪問 10000/10002 底層就是 Ribbon 默認的輪詢負載演算法
2.Ribbon原理
2.1Ribbon架構圖&機制
Ribbon 機制:
- 消費者先選擇 EurekaServer,它優先選擇在同一個區域內負載較少的 server
- 再根據程式員指定的策略,在從 server 取到的服務注冊串列中選擇一個地址
- Ribbon 提供了多種策略∶ 比如輪詢、隨機和根據回應時間加權,
2.2Ribbon常見負載演算法
| 策略名 | 描述 |
|---|---|
| BestAvailableRule | 選擇一個最小并發請求的server,逐個考察server,如果server被tripped(跳閘)了,則忽略,再選擇其中ActiveRequestsCount最小的Server |
| AvailabilityFilteringRule | 過濾掉那些因為一直連接失敗的被標記為circuit tripped的后端server,并過濾掉那些高并發的后端server(active connections超過配置的閾值) |
| WeightedResponseTimeRule | 根據回應時間分配一個weight,回應時間越長,weight越小,被選中的可能性越低 |
| RetryRule | 對選定的負載均衡策略機上重試機制,在一個配置時間段內當選擇Server不成功,則一直嘗試使用subRule的方式選擇一個可用的server |
| RoundRobbinRule | 輪詢index,選擇index對應位置的server |
| RandomRule | 隨機選擇一個server,在index上隨機,選擇index對應位置的server |
| ZoneAvoidanceRule | 復合判斷server所在區域的性能和server的可用性,來選擇server |
3.切換負載均衡演算法-應用實體
需求:將默認的輪詢演算法改為隨機演算法RandomRule,瀏覽去訪問消費方,要求消費方訪問服務方埠是隨機的
(1)創建消費方的RibbonRule.java,指定負載均衡的策略
package com.li.springcloud.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 李
* @version 1.0
* 配置自己的負載均衡演算法
*/
@Configuration
public class RibbonRule {
//注入指定的均衡演算法
@Bean
public IRule myRibbonRule(){
//這里指定RandomRule
return new RandomRule();
}
}
(2)在主程式中使用注解指定Ribbon的配置
在上面RibbonRule的配置是全域的,不在主程式中配置也可以使用,這里在主程式中指定只是更加明確
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549607.html
標籤:Java
