7.狀態統計

一、簡介

這裏的統計主要是觸發遠程調用的統計,跟負載均衡沒啥關係,但是,負載均衡需要這些依賴這些統計信息做爲判斷的策略。

統計類主要是LoadBalancerStats,其內部持有ServerStats對每個server的調用做了相關統計。

二、實現

  1. 成員變量
    1.1 LoadBalancerStats內部有兩個成員變量,一是upServerListZoneMap,二是serverStatsCache
    在這裏插入圖片描述
    1.2 upServerListZoneMap定義爲volatile Map<String, List<? extends Server>>,其中存儲了zone和server列表的對應關係。
    1.3 serverStatsCache定義爲LoadingCache<Server, ServerStats>,存儲了server和ServerStats對象的對應關係,其使用了guaua的cache。
    1.4 根據以上兩種結構,能夠從每個server的狀態統計到整個zone的狀態。
  2. 重要的方法
    getZoneSnapshot:根據zone獲取到server列表,根據server獲取到統計信息,從而計算出整個zone的快照狀態,包括如下狀態項:
    1. zone中的實例數量
    2. 平均load(活躍請求量/實例數量)
    3. 斷路器打開的實例數量
    4. 總活躍請求量
  3. ServerStats是對具體某個server進行狀態統計的類,其主要統計項如下:
    1. activeRequestsCount:活躍請求數量(正在請求的數量)。
    2. requestCountInWindow:一個窗口期內的請求數據,窗口期爲5分鐘。
    3. firstConnectionTimestamp:首次鏈接時間戳。
    4. lastAccessedTimestamp:最後訪問時間戳。
    5. lastActiveRequestsCountChangeTimestamp:最後請求數量變更時間戳。
    6. totalRequests:總請求量。
    7. successiveConnectionFailureCount:連續請求異常數量(後續有一次成功即重置爲0)。
    8. lastConnectionFailedTimestamp:最後請求失敗時間戳。
    9. serverFailureCounts:server上一秒失敗次數。
    10. totalCircuitBreakerBlackOutPeriod:斷路器斷電總時間段(連續失敗>=3次,增加20~30秒)。
    11. responseTimeDist:響應時間分佈,包括最大,最小,中位,平均,方差等。
    12. getCircuitBreakerBlackoutPeriod():是方法,獲取斷路器斷電時間段。
    13. getCircuitBreakerTimeout():是方法,獲取斷路器斷電時間戳(lastConnectionFailedTimestamp+getCircuitBreakerBlackoutPeriod())。

三、使用

根據之前介紹的ribbon的組件,這些統計信息都在哪用了呢,下面進行一些舉例:
對應監控指標在ribbon中的使用:

調用方使用的指標簡介
負載均衡策略 WeightedResponseTimeRuleServerStats.responseTimeDist獲取平均響應時間作爲權重計算的策略
AvailabilityFilteringRuleServerStats.getCircuitBreakerTimeout()判斷當前斷路器是否打開作爲是否可用的策略
ServerStats.activeRequestsCount使用活躍請求數量選擇最小的server
ZoneAvoidanceRuleServerStats.upServerListZoneMap獲取可用的所有zone
LoadBalancerStats.getZoneSnapshot獲取zone狀態信息

四、觸發

這些統計的觸發點在哪呢?參考RibbonLoadBalancerClient的如下代碼:
在這裏插入圖片描述

發佈了62 篇原創文章 · 獲贊 23 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章