隨著物聯網的普及,服務應用將面對大量物聯裝置處理;早期.NET在通訊上的處理能力一直給人的印像並不怎樣,但net core經歷過大量的優化後在各個模組的處理效能都有著比較出色的提升,針對網路方向的處理模組也有著顯著的提升。以下主要測試.net core在不同連線資料併發下的資源吏用情況,用於評估在不同數量連線上服務的處理能力和硬體配置的需求。
測試描述
分別以200,10萬,50萬,100萬不同連線數下接收資料包和響應的資源使用情況,200連線情況下通過響應請求方式進行高吞吐壓測,後面則模擬裝置每10秒傳送一個資料包。傳送資料如下:
000000123,0002123,00001234,20190430093022,01,020
以上簡單地模擬一個裝置資訊,主要包括ID,座標,時間和狀態資訊等,服務端接收後分解訊息並返回。服務端處理程式碼如下:
public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
{
base.SessionReceive(server, e);
var stream = e.Stream.ToPipeStream();
while (stream.TryReadLine(out string line))
{
string[] properties = line.Split(',');
stream.WriteLine(line);
e.Stream.Flush();
}
}
測試環境
- 作業系統
window 2008 server
- 執行環境
dotnet core 2.1
- 硬體資源
CPU E3-1230V2 16G記憶體 10Bb網路
- 測試工具
Tcp TCPBenchmarks
https://github.com/IKende/TCPBenchmarks
200連線
在小連線的情況其吞吐能力還是非常出色的,在這臺PC上達到30萬rps的情況還沒完全把CPU跑滿。
10萬連線
測試結果來看,平均併發在10000RPS;大部分請求都能在5ms內響應完成,而程式大部分工作時間CPU在10%以內,記憶體佔用大概700MB。
50萬連線
測試結果來看在50萬線上的時候,平均併發在100000RPS;大部分請求同樣在5ms內響應完成,程式大部分工作時間的CPU在20%以內,記憶體佔用大概在3.5G
100萬連線
100萬線上的時候,平均併發在100000RPS;大部分請求同樣在100ms內響應完成,程式大部分工作時間的CPU在40%以內,記憶體佔用大概在7-9G.不過這次測試的延時相對比較高,由於負載量的情況測試端也會引起延時的問題,所以導致整體延時比較高。
總結
以上測試的伺服器的CPU比較舊,已經是6年前的老產品,但在這個CPU的支援下執行100萬連線處理也不算存在壓力。其主要原因還是整體的RPS並不高,當在100萬連線的情況吞吐值在10萬RPS;這樣也可以說明在網路服務中佔CPU資源的是請求的響應量而不是線上的連線數,不過當線上連線數比較多的情況還是需要佔用大量的記憶體;所以在制是定硬體規劃的時候可以針對線上連線數和請求量進行一個結合規劃。