在很多阿里雙11高并發(fā)場景經(jīng)常提到QPS、TPS、RT、吞吐量等指標(biāo),這些高并發(fā)高性能指標(biāo)都是什么含義?如何來計算?下面我一一詳解@mikechen
系統(tǒng)吞度量
系統(tǒng)吞吐量指的是系統(tǒng)在單位時間內(nèi)可處理的事務(wù)的數(shù)量,是用于衡量系統(tǒng)性能的重要指標(biāo)。
例如在網(wǎng)絡(luò)領(lǐng)域,某網(wǎng)絡(luò)的系統(tǒng)吞吐量指的是單位時間內(nèi)通過該網(wǎng)絡(luò)成功傳遞的消息包數(shù)量。
舉一個生活中的例子,一說就懂,比如:成都雙流國際機(jī)場年旅客吞吐量達(dá)4011.7萬人次,這里的系統(tǒng)單位時間就是年,完成的數(shù)量這里就是飛行人數(shù)。
上面談到的是機(jī)場的吞吐量,而系統(tǒng)吞吐量指的是系統(tǒng)(比如服務(wù)器)在單位時間內(nèi)可處理的事務(wù)的數(shù)量,是一個評估系統(tǒng)承受力的重要指標(biāo)。
系統(tǒng)吞吐量有幾個重要指標(biāo)參數(shù):
- QPS
- TPS
- 響應(yīng)時間
- 并發(fā)數(shù)
下面我分別一一詳解。
QPS
QPS(Queries Per Second):大家最熟知的就是QPS,這里我就不多說了,簡要意思就是“每秒查詢率”,是一臺服務(wù)器每秒能夠相應(yīng)的查詢次數(shù),是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn)。
TPS
TPS(Transactions Per Second):意思是每秒鐘系統(tǒng)能夠處理的交易或事務(wù)的數(shù)量,它是衡量系統(tǒng)處理能力的重要指標(biāo)。
具體事務(wù)的定義都是人為的,可以一個接口、多個接口、一個業(yè)務(wù)流程等等。
舉一個例子,比如在web性能測試中,一個事務(wù)是指事務(wù)內(nèi)第一個請求發(fā)送到接收到最后一個請求的響應(yīng)的過程,以此來計算使用的時間和完成的事務(wù)個數(shù)。
以單接口定義為事務(wù)為例,每個事務(wù)包括了如下3個過程:
a.向服務(wù)器發(fā)請求
b.服務(wù)器自己的內(nèi)部處理(包含應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器等)
c.服務(wù)器返回結(jié)果給客戶端。
總結(jié),在web性能測試中一個事務(wù)表示“從用戶發(fā)送請求->web server接受到請求,進(jìn)行處理-> web server向DB獲取數(shù)據(jù)->生成用戶的object(頁面),返回給用戶”的過程。
怎么計算TPS的呢?
舉一個最簡單的例子,如果每秒能夠完成100次上面這三個過程,那TPS就是100。
一般的,評價系統(tǒng)性能均以每秒鐘完成的技術(shù)交易的數(shù)量來衡量。
比如大家熟知的阿里雙11,一秒峰值完成58.3萬筆訂單,這樣就量化了系統(tǒng)處理高并發(fā)的重要指標(biāo)。
QPS與TPS的區(qū)別
上面分別談完了QPS與TPS,我們再來看看兩者有什么區(qū)別呢?
假如對于一個頁面的一次訪問算一個TPS,但一次頁面請求,可能產(chǎn)生N次對服務(wù)器的請求,服務(wù)器對這些請求,就可計入QPS之中,即QPS=N*TPS。
又假如對一個查詢接口(單場景)壓測,且這個接口內(nèi)部不會再去請求其它接口,那么TPS=QPS。
RT響應(yīng)時間
RT(Response-time)響應(yīng)時間:執(zhí)行一個請求從開始到最后收到響應(yīng)數(shù)據(jù)所花費(fèi)的總體時間,即從客戶端發(fā)起請求到收到服務(wù)器響應(yīng)結(jié)果的時間。
該請求可以是任何東西,從內(nèi)存獲取,磁盤IO,復(fù)雜的數(shù)據(jù)庫查詢或加載完整的網(wǎng)頁。
暫時忽略傳輸時間,響應(yīng)時間是處理時間和等待時間的總和,處理時間是完成請求要求的工作所需的時間,等待時間是請求在被處理之前必須在隊列中等待的時間。
響應(yīng)時間是一個系統(tǒng)最重要的指標(biāo)之一,它的數(shù)值大小直接反應(yīng)了系統(tǒng)的快慢。
并發(fā)數(shù)Concurrency
并發(fā)數(shù)是指系統(tǒng)同時能處理的請求數(shù)量,這個也反應(yīng)了系統(tǒng)的負(fù)載能力。
并發(fā),指的是多個事情,在同一段時間段內(nèi)發(fā)生了,大家都在爭奪統(tǒng)一資源。
比如:當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個 CPU,則它根本不可能真正同時進(jìn)行一個以上的線程,它只能把 CPU 運(yùn)行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行,在一個時間段的線程代碼運(yùn)行時,其它線程處于掛起狀態(tài),這種方式我們稱之為并發(fā)(Concurrent)。
并發(fā)編程屬于高并發(fā)的一個重要分支,也是大廠的必備要求,如果想更加全面深入學(xué)習(xí)JAVA并發(fā),可以查看《Java多線程與并發(fā)編程從0到1全部合集》。