如何為監控資料計算百分位數?


介紹

監控線上系統,特別是資料密集型系統,對於持續健康檢查、分析和檢測停機時間以及提高效能至關重要。基於百分位數的方法是一種非常有效的衡量此類系統行為的技術。讓我們看看這種方法。

一般複習

什麼是百分位數,為什麼它們有用?

在統計學中,表示特定組觀察值低於該值的數值稱為百分位數或百分點。例如,對於一名學生,如果他/她的分數為 90 百分位,則表示 90% 的學生得分低於他/她。另一個例子可以是,如果 HTTP 請求的響應時間為 90 百分位,則表示 90% 的響應值低於它。

第 25th 百分位數和第 75th 百分位數之間的觀察值範圍稱為四分位距

第 25th 百分位數也稱為第 1st 四分位數,第 50th 百分位數稱為第 2nd 四分位數,第 75th 百分位數稱為第 3rd 四分位數。

當我們想要了解某個值相對於其他觀察值的位置時,百分位數非常有用。這可以透過使用值的分佈圖來實現。與此相關的各種統計術語,如平均值、中位數和眾數。

計算百分位數的公式可以表示為

$$\mathrm{n\:=\:\frac{p}{100}\:x\: 𝑁}$$

其中 P = 百分位數,N = 資料集中按升序排序的值的數量,n = 固定序數。

監控資料密集型系統 – 計算百分位數

在監控任務中,我們主要使用百分位數。其他方法,如平均值方法,受異常值的影響很大。在線上系統中,收集器用於收集資料並計算資料的分位數。

一種常見的方法

在 HTTP 請求監控的情況下,請求週期可以劃分為分位數。特定分位數,例如 ( φ50 ),可以表示為一個隨機值,其機率不能超過 50%。假設 HTTP 請求的資料流包含 n 個元素,那麼我們需要找到一個具有 φ 𝑥 𝑛 個元素的元素,其大小可能非常大,例如 1GB。

對此的解決方案是計算資料流的近似分位數。在這種方法中,整個資料流被壓縮成一組段。每個段都有固定的寬度 ( 𝑤 ) 和每個段的長度 ( l )

即時捕獲資料的百分位數 

例如,假設我們希望在特定時間點將 1000 個值儲存在記憶體中。

讓我們選擇大小 k = 100,以及 1 毫秒的最小寬度(解析度)。

第一個值區間位於 0 到 1 毫秒之間 ( w = 1 毫秒)

並且,

第二個區間 − 1 到 3 毫秒(寬度 = 2 毫秒)

第三個區間 − 3 到 7 毫秒(寬度 = 4 毫秒)

直到第 10th 個區間 − 511 到 1023 毫秒(寬度 = 512 毫秒)

計算

  • 為我們的響應時間建立區間(例如,0 到 100 毫秒、100 毫秒到 200 毫秒、200 毫秒到 400 毫秒...)

  • 計算有多少響應以及每個區間中的響應數量。

  • 將區間計數器相加,直到總和超過總響應的 n%,以計算第 n 個百分位數。

Python 中的虛擬碼片段

示例

def increment(millis): i = index(millis) if i < len(_limits): _counts[i] += 1 _total+=1; def estimate_percentile(percentile): if percentile < 0.0 or percentile > 100.0 : print("percentile must be between 0.0 and 100.0, was " + percentile) return "Error" if percentile - p.get_percentage() <= 0.0001): return get_limit()

結論

效能監控和健康檢查是當今每個資料密集型應用程式的關鍵。基於百分位數的方法在這一領域取得了豐碩成果,並已被證明是當前場景中的有用工具

更新於: 2022-12-30

712 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告