首頁  >  文章  >  Java  >  sping-cloud-ribbon原理解析:ribbon的幾個核心類

sping-cloud-ribbon原理解析:ribbon的幾個核心類

php是最好的语言
php是最好的语言原創
2018-08-02 14:35:252259瀏覽

Ribbon是一個客戶端負載平衡器,它可以很好地控制HTTP和TCP客戶端的行為。 Feign已經預設使用了Ribbon(參考文章)

一、先來看看ribbon的幾個核心類別

1、IClientConfig 預設實作類別DefaultClientConfigImpl ,主要用來設定ribbon客戶端的相關屬性配置

2、ServerListUpdater預設實作類別PollingServerListUpdater,主要負責動態更新伺服器清單

  • start方法呼叫後會啟動一個定時任務,延時1s開始執行,以每30s的時間間隔週期執行

    • 週期時間間隔可以透過ribbon.ServerListRefreshInterval=1000ribbonClientName.ribbon.ServerListRefreshInterval=1000來設定

  • #DynamicServerListLoadBalancer初始化的時候執行呼叫

#3、

ServerList取得伺服器清單

  • 預設實作類

    ConfigurationBasedServerList,預設是從設定檔取伺服器列表,這樣設定[ribbonClinetName].ribbon.listOfServers=xxx,xxx

  • sping-cloud-ribbon原理解析:ribbon的幾個核心類

  • ConsulServerList

    引入consul作服務發現的實作類,主要負責取得註冊中心的伺服器清單

  • ##備註:可以透過設定來擴充自己的

    ServerList實現,像這樣:[ribbonClient].ribbon.NIWSServerListClassName=類別名稱

    sping-cloud-ribbon原理解析:ribbon的幾個核心類

    4、

    ServerListFilter伺服器列表過濾器

    預設實作類別
  • ZonePreferenceServerListFilter
主要根據分區來過濾伺服器清單

##HealthServiceServerListFilter
    引入consul服務發現的實作類,主要負責過濾consul健康檢查通過的伺服器列表(在ConsulServerList中會取得所有的伺服器列表,包括健康檢查沒有通過的伺服器)
  • 備註:可以透過配置來擴展自己的
  • ServerList

    實現,像這樣[ribbonClient].ribbon.NIWSServerListFilterClassName=類別名稱

    #5、sping-cloud-ribbon原理解析:ribbon的幾個核心類IPing
    檢查伺服器是否或

    預設實作DummyPing,這是一個假的偵測著,永遠回傳是true

ConsulPing,引入consul服務發現的實作類,主要根據consul傳回的checks參數來判斷伺服器是否活著,跟

HealthServiceServerListFilter
    的過濾判斷一樣
  • 備註:可以透過設定來擴展自己的
  • ServerList

    實現,像這樣:[ribbonClient].ribbon .NFLoadBalancerPingClassName=類別名稱

  • 6、IRule負載平衡選擇器

  • ##預設實作

    ZoneAvoidanceRule,複合判斷server所在區域的效能和server的可用性選擇server

  • RandomRule:隨機選擇一個server

  • #RoundRobinRule:roundRobin方式輪詢選擇server

  • #RetryRule:對選定的負載平衡策略機上重試機制。

WeightedResponseTimeRulesping-cloud-ribbon原理解析:ribbon的幾個核心類:根據回應時間分配一個weight,回應時間越長,weight越小,被選取的可能性越低。

AvailabilityFilteringRule:過濾掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高並發的的後端server( active connections 超過配置的閾值)

  • BestAvailableRule:選擇一個最小的並發請求的server

    sping-cloud-ribbon原理解析:ribbon的幾個核心類

    7、

    ILoadBalancer

    負載平衡總控制器,預設實作類別
  • ZoneAwareLoadBalancer
,其啟動了​​整個負載平衡客戶端

sping-cloud-ribbon原理解析:ribbon的幾個核心類

## ##可以透過設定來擴展自己的###ServerList###實現,像這樣:###[ribbonClient].ribbon.NFLoadBalancerClassName=類別名稱################# #####負載平衡器啟動時序圖:###################
  • 初始化時首先會初始化一個定時任務,每隔30s執行一次,緩存裡面會保存所有從註冊中心獲取實例列表allServerList和經過ping成功的實例列表upServerList,但是負載平衡的時候拿到的列表是allServerList而非upServerList,不明白這個ping的意義在哪裡

  • #啟動一個定時任務,定時從註冊中心拉取服務列表,每個30s執行一次

  • 初始化取得服務列表,拉取到的服務列表經過ServiceFilter過濾後保存在快取裡面

當客戶端發起呼叫的時候會呼叫ILoadBalancer的chooseServer方法,根據IRule的負載平衡演算法選擇一個實例回傳給呼叫者.

相關文章:

WPF 4 Ribbon 開發之快捷工具列(Quick Access Toolbar )

SharePoint 2013 隱藏頁面的Ribbon ,選單等非內容元素

#

以上是sping-cloud-ribbon原理解析:ribbon的幾個核心類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn