什么是並發
並發數是 16TPS,就是 1 秒內整個系統處理了 16 個事務。
在線用戶數、並發用戶數怎么計算
如上圖所示,總共有 32 個用戶進入了系統,但是綠色的用戶並沒有任何動作,那么顯然,在線用戶數是 32 個,並發用戶數是 16 個,這時的並發度就是 50%。
但在一個系統中,通常都是下面這個樣子的。
為了能 hold 住更多的用戶,我們通常都會把一些數據放到 Redis 這樣的緩存服務器中。所以在線用戶數怎么算呢,如果僅從上面這種簡單的圖來看的話,其實就是緩存服務器能有多大,能 hold 住多少用戶需要的數據。
最多再加上在超時路上的用戶數。如下所示:
所以我們要是想知道在線的最大的用戶數是多少,對於一個設計邏輯清晰的系統來說,不用測試就可以知道,直接拿緩存的內存來算就可以了。
假設一個用戶進入系統之后,需要用 10k 內存來維護一個用戶的信息,那么 10G 的內存就能 hold 住 1,048,576 個用戶的數據,這就是最大在線用戶數了。在實際的項目中,我們還會將超時放在一起來考慮。
但並發用戶數不同,他們需要在系統中執行某個動作。我們要測試的重中之重,就是統計這些正在執行動作的並發用戶數。
要想計算並發用戶和在線用戶數之間的關系,都需要有並發度。
如果有 10000 個在線用戶數,同時並發度是 1%,那顯然並發用戶數就是 100。
如果每個線程的 20TPS,顯然只需要 5 個線程就夠了(請注意,這里說的線程指的是壓力機的線程數)。
這時對 Server 來說,它處理的就是 100TPS,平均響應時間是 50ms。50ms 就是根據 1000ms/20TPS 得來的(請注意,這里說的平均響應時間會在一個區間內浮動,但只要 TPS 不變,這個平均響應時間就不會變)。如果我們有兩個 Server 線程來處理,那么一個線程就是 50TPS,這個很直接吧。
請大家注意,這里我有一個轉換的細節,那就是並發用戶數到壓力機的並發線程數。
而我們通常說的“並發”這個詞,依賴 TPS 來承載的時候,指的都是 Server 端的處理能力,並不是壓力工具上的並發線程數。在上面的例子中,我們說的並發就是指服務器上 100TPS 的處理能力,而不是指 5 個壓力機的並發線程數。
如果要有公式的話,這個計算公式將非常簡單:
TPS=1000ms∗壓力機線程數/響應時間(單位ms)
對於壓力工具來說,只要不報錯,我們就關心 TPS 和響應時間就可以了,因為 TPS 反應出來的是和服務器對應的處理能力,至少壓力線程數是多少,並不關鍵。
總結
通過示意圖和示例,我描述了在線用戶數、並發用戶數、TPS(這里我們假設了一個用戶只對應一個事務)、響應時間之間的關系。有幾點需要強調:
通常所說的並發都是指服務端的並發,而不是指壓力機上的並發線程數,因為服務端的並發才是服務器的處理能力。
性能中常說的並發,是用 TPS 這樣的概念來承載具體數值的。
壓力工具中的線程數、響應時間和 TPS 之間是有對應關系的。