你知道併發使用者數應該怎麼算嗎?

絲瓜呆呆發表於2021-06-07

什麼是併發

 併發數是 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 之間是有對應關係的。

 

相關文章