Ribbon

1、概述

  1. 版本依賴說明:java

    spring-boot spring-cloud spring-cloud-alibaba
    2.0.8.RELEASE Finchley.SR2 2.0.0.RELEASEE
  2. 核心組件git

    Ribbion核心組件github

  3. 負載均衡策略spring

    策略名 策略描述 實現說明
    BestAvailableRule B選擇一個最小的併發請求的server 逐個考察Server,若是Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server
    AvailabilityFilteringRule 過濾掉那些由於一直鏈接失敗的被標記爲circuit tripped的後端server,並過濾掉那些高併發的的後端server(active connections 超過配置的閾值) 使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status裏記錄的各個server的運行狀態
    WeightedResponseTimeRule 根據相應時間分配一個weight,相應時間越長,weight越小,被選中的可能性越低 一 個後臺線程按期的從status裏面讀取評價響應時間,爲每一個server計算一個weight。Weight的計算也比較簡單responsetime 減去每一個server本身平均的responsetime是server的權重。當剛開始運行,沒有造成statas時,使用roubine策略選擇 server。
    RetryRule 對選定的負載均衡策略機上重試機制。 在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server
    RoundRobinRule roundRobin方式輪詢選擇server 輪詢index,選擇index對應位置的server
    RandomRule 隨機選擇一個server 在index上隨機,選擇index對應位置的server
    ZoneAvoidanceRule 複合判斷server所在區域的性能和server的可用性選擇server 使 用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷斷定一個 zone的運行性能是否可用,剔除不可用的zone(的全部server),AvailabilityPredicate用於過濾掉鏈接數過多的 Server。

    2、配置說明

    Ribbon配置由RibbonClientConfiguration進行讀取設置,能夠選擇JavaBean方式,也可使用配置文件配置,推薦使用配置文件的方式。(有時候可能會出現意想不到的問題,我在配置超時時間的時候,發生HttpClient的IO異常,不清楚是什麼緣由。)後端

  • 默認的配置實現:bash

    Bean Type Bean Name Class Name
    IClientConfig ribbonClientConfig DefaultClientConfigImpl
    IRule ribbonRule ZoneAvoidanceRule
    IPing ribbonPing DummyPing
    ServerList ribbonServerList ConfigurationBasedServerList
    ServerListFilter ribbonServerListFilter ZonePreferenceServerListFilter
    ILoadBalancer ribbonLoadBalancer ZoneAwareLoadBalancer
    ServerListUpdater ribbonServerListUpdater PollingServerListUpdater
  • 文件的配置方式併發

    • 服務粒度的配置
    <service-provider-id>.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule
    複製代碼
    • 全局配置負載均衡

      存疑dom

  • JavaBean配置socket

    請參閱官網

3、關於Ribbon的超時重試配置

在我使用的版本中必須先開啓 ribbon.http.client.enabled=true,不然如下配置不生效。

配置項 配置說明 缺省值
ConnectTimeout http創建socket超時時間,毫秒 1000
ReadTimeout http讀取響應socket超時時間 1000
MaxAutoRetries 同一臺實例最大重試次數,不包括首次調用 --
MaxAutoRetriesNextServer 負載均衡其餘的實例最大重試次數 --
OkToRetryOnAllOperations 是否全部操做都重試,POST請求注意冪等問題. 默認false,只有get請求會重試
retryableStatusCodes 對Http響應碼進行重試 --

4、其餘

DynamicServerListLoadBalancer封裝了全部配置項,負載均衡策略等信息,能夠斷點查看。

源代碼:github.com/IndiraFinis…

2019年10月1日更新:

  1. ribbon不支持配置文件全局配置很是坑爹,只能是服務粒度的,全局配置必須使用javaBean配置
  2. 使用nacos做爲註冊中心時,動態增長服務實例時有問題,不清楚是否和nacos有關,動態增長服務必須重啓客戶端
  3. 再次測試的時候發現同一個服務,兩個實例,使用輪詢負載均衡的時候一個實例超時,盡然沒有辦法自動負載到另外一實例上。這裏存疑
相關文章
相關標籤/搜索