spring cloud系列教程(7)---ribbon負載均衡演算法
給大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油
1.ribbon工作的大概步驟
第一步先選擇EurekaServer,它優先選擇在同一個區域內負載較少的server。
第二步:再根據使用者指定的策略,從server取到的服務註冊列表中選擇一個地址。其中ribbon提供了多種策略:日入輪詢,隨機和根據相應時間加權
2.自帶的負載均衡演算法
可以看看例如 randomrule 是在服務列表中隨機一個數
RoundRobinRule 是利用一個類變數AtomicInteger 來計數
Ribbon負載均衡演算法的實現是由IRule元件負責的預設有下面幾種演算法
RoundRobinRule 輪詢
RandomRule 隨機
AvailabilityFilteringRule 會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,還有併發的連線數量超過閾值的服務,然後對剩餘的服務列表按輪詢策略進行訪問
WeightedResponseTimeRule 根據平均響應時間計算所有服務的權重,響應時間越快服務權重越大被選中的概率越高。剛啟動時如果統計資訊不足,則使用RoundTobinRule策略,等統計資訊足夠會切換到WeightedResponseTimeRule
RetryRule 先按照RoudRobinRule的策略獲取服務,如果獲取服務失敗則在指定時間內進行重試,獲取可用服務,如果還是失敗的就會自動把這個失敗的服務隔離掉
BestAvailableRule 會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,然後選擇一個併發量小的服務
ZoneAvoidanceRule 預設規則,複合判斷server所在區域的效能和server的可用性選擇伺服器
3.自定義規則
每個服務呼叫5次後,換下一個服務
主要程式碼:
if (total.get() < 5) {
totalAdd();
server = upList.get(currentIndex.get());
} else {
total = new AtomicInteger(0);
indexAdd();
if (currentIndex.get() >= upList.size()) {
currentIndex = new AtomicInteger(0);
}
}