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






