Ribbon提供的若干個內置的負載規則,用戶可以直接使用,基本可以滿足大部分的需求,如果有更爲複雜的要求,建議實現自定義負載規則。
主要規則如下:
- RoundRobinRule:系統默認規則,也是用的較多的一種規則。通過簡單的輪詢服務列表來選擇服務器,其他的規則在很多情況下仍然使用RoundRobinRule。
- AvailabilityFilteringRule:顧名思義,有效性過濾規則。該規則會忽略一下服務器:
-
無法連接的服務器:在默認情況下,如果 3 次連接失敗,該服務器將會被置爲 “短路”的狀態,該狀態將持續 30 秒,如果再次連接失敗,“短路”狀態的持 續 時 間 將 會 以 幾 何 級 增 加 。 可 以 通 過 修 改 niws.loadbalancer<clientName>.connectionFailureCountThreshold 屬性,來 配置連接失敗的次數。
-
高併發數過高的服務器:如果連接到該服務器的併發數過高,也會被這個規則忽略,可以通過修改<clientName>.ribbon.ActiveConnectionsLimit 屬性來設定最高併發數。
3.WeightedResponseTimeRule:爲每個服務器賦予一個權重值,服務器的響應時間 越長,該權重值就是越少,這個規則會隨機 選擇服務器,這個權重值有可能會決定 服務器的選擇。
4.ZoneAvoidanceRule:該規則以區域、可用服務器爲基礎,進行服務器選擇。使用 Zone 對服務器進行分類,可以理解爲機架或者機房。
5.BestAvailableRule:忽略“短路”的服務器,並選擇併發數較低的服務器。
6.RandomRule:顧名思義,隨機選擇可用的服務器。
7.RetryRule:含有重試的選擇邏輯,如果使用 RoundRobinRule 選擇服務器無法連 接,那麼將會重新選擇服務器。
以上內容整理自《瘋狂 Spring Cloud 微服務架構實戰》這本書。作者:楊恩雄。本人也在學習,整理出來,供大家方便查看。