pps服务器未响应_服务响应时间与分布
分析服務(wù)響應(yīng)時間分布,如:均值、中位值、P95值、P99值等如何計算
背景
最近看得多,寫得少,所謂
學(xué)而不思則罔,思而不學(xué)則殆還是得記錄筆記,以加強理解。
有篇博客提到服務(wù)響應(yīng)時間各種值之優(yōu)劣,特記錄之。
平均值
我們考察一個服務(wù)器的性能,除了QPS數(shù)據(jù)外,還會考察響應(yīng)時間,當(dāng)服務(wù)器負載增高時,往往會伴隨著響應(yīng)時間的增長,但是這個值該如何度量,以精準(zhǔn)的表現(xiàn)服務(wù)器當(dāng)前之負載呢?
最常用的值為平均值,表示服務(wù)的平均響應(yīng)時間,通過該值我們能夠知道服務(wù)當(dāng)前響應(yīng)的所有請求耗時的平均值。 例如平均耗時為100ms,表示服務(wù)器當(dāng)前請求的總耗時/請求總數(shù)量,通過該值,我們大體能知道服務(wù)運行情況。 但是對于具體有多少個請求的耗時比100ms要大,大多少,是200ms,還是500ms,還是1000ms,我們無從得知。 而且,平均值這個數(shù)據(jù)容易掩蓋一些異常值問題,比如,我的財富加馬云財富的平均值也能過億,所以,平均值這個數(shù)據(jù)項過于簡單,提供的信息量太少。
那為什么我們通常采用平均值來衡量或者監(jiān)控服務(wù)性能呢?
主要是由于該值容易計算,采用兩個變量S、N,即可持續(xù)計算平均值:
S = S + X N = N + 1 V = S/N通過該公式,當(dāng)有新的耗時值X需要考量,很方便的就能算出平均值,就算QPS到幾十萬/s,也不在話下。
注意,該公式有個隱含問題,即是S增長過快問題,如果QPS過高,X值過大,很容易導(dǎo)致S溢出,從而導(dǎo)致結(jié)果計算異常。
可將該公式做如下改造:
Vs = S/N Vn = (S+X)/(N+1) = (Vs*N+X)/(N+1) = Vs + (X - Vs)/(N+1)該算法也只需要兩個變量,未考量數(shù)據(jù)X時——平均值Vs、數(shù)據(jù)個數(shù)N 但是,該算法由于不累加S,而只累加N,而N的增長極慢,不易導(dǎo)致溢出問題。
中位值
如上所述,由于平均值不能反映數(shù)據(jù)分布及極端異常值的問題,可以考慮采用中位值來作為度量。
中位值如何計算?
我們假設(shè)某服務(wù)在1s內(nèi)響應(yīng)了100個請求,耗時為X1、X2 ... X100,可以對這100個數(shù)按照從小到大的順序進行排序,在排序后的列表的中間位置的值——即為中位值,假設(shè)為150ms。
那這個值,150ms,表示什么意思呢? 它表示,服務(wù)器響應(yīng)的這100個請求里面有50個的請求耗時小于150ms,另有50個請求的耗時大于150ms。
如果,我們有一個服務(wù)qps為3萬/s,經(jīng)過計算響應(yīng)耗時中位值為100ms,那么我們可以推斷有1.5萬個請求的耗時小于100ms,也就是說我們有一半的用戶的響應(yīng)耗時小于100ms,據(jù)此我們就可以評估服務(wù)響應(yīng)性能是否可以滿足業(yè)務(wù)要求。
但是,這個中位值還有另外一個問題,我們只知道還有一半的請求耗時大于100ms,具體是大多少,大200ms,還是500ms,我們無法得知。
P95值與P99值
由于中位值只能反映中位數(shù)的問題,不能反饋更多信息,例如,我想知道該服務(wù)80%的請求耗時在多少ms以內(nèi),這些問題需要額外的數(shù)據(jù)指標(biāo)。
P95——響應(yīng)耗時從小到大排列,順序處于95%位置的值即為P95值。
還是采用上面那個例子,100個請求按照響應(yīng)時間從小到大排列,位置為95的值,即為P95值。 我們假設(shè)該值為180ms,那這個值又表示什么意思呢?
意思是說,我們對95%的用戶的響應(yīng)耗時在180ms之內(nèi),只有5%的用戶的響應(yīng)耗時大于180ms,據(jù)此,我們掌握了更精確的服務(wù)響應(yīng)耗時信息。
P99.9值
亞馬遜經(jīng)常采用P99.9值,也就是99.9%用戶耗時作為指標(biāo),也就是1000個用戶里面,999個用戶的耗時上限,如果測量與優(yōu)化該值,即可保證絕大多數(shù)用戶的使用體驗。 至于P99.99值,優(yōu)化成本過高,而且服務(wù)響應(yīng)由于網(wǎng)絡(luò)波動、系統(tǒng)抖動等不能解決之情況,故暫不考慮該指標(biāo)。
如何計算P分位值
如上說過平均值的計算方式,而P值需要將響應(yīng)耗時從小到大排序,然后取得對應(yīng)百分位之值。
如果服務(wù)qps較低,例如:100/秒,記錄這100個耗時數(shù)據(jù),然后排序,然后取得P分位值,倒不是難事。 而如果qps較高,例如:30萬/秒,如果還是采用記錄+排序的方式,可以預(yù)見需要消耗大量內(nèi)存與計算資源。
有沒有簡單的計算方式呢?
可以采用直方圖來進行計算,該計算方式雖不是完全準(zhǔn)確值,但精度非常高,誤差較小。
直方圖需要界定兩個直方之間的跨度,一般采用等分形式,例如對于耗時統(tǒng)計需求,我們可以假定一個耗時上界,然后等分,比如劃分成100個區(qū)間,對于每個響應(yīng)耗時落入對應(yīng)的直方,如下圖:
這樣就避免了對全部數(shù)據(jù)進行排序,只需要根據(jù)各個直方中的數(shù)據(jù)數(shù)量,即可計算出95%位置位于哪個直方,然后在該直方內(nèi)部采用插值方法,計算出P95值。
另外,考慮到數(shù)據(jù)分布特點,服務(wù)耗時異常數(shù)據(jù)應(yīng)該只是少數(shù),但是異常值跨度可能很大,大部分耗時數(shù)據(jù)均靠近正常值,如果直方統(tǒng)計采用等分形式,會導(dǎo)致大量數(shù)據(jù)堆積在一個直方中,如何解決這個問題?
可以采用非等分的跨度劃分方式,例如采用指數(shù)形式劃分,耗時越低的區(qū)間,跨度越小,精度約高。
總結(jié)
以上是生活随笔為你收集整理的pps服务器未响应_服务响应时间与分布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ dump某个变量_linux内核
- 下一篇: python sub 不区分大小写_Py