BeetleX新版本進入了效能測試階段,設計目標除了最佳化設計結構、替換記憶體池方案希望初期效能和舊版本相當。不過從這次的測試結果來看還是相當理想的。在之前的測試中客戶端壓測使用了BeetleX舊版本編寫的壓測工具,壓測效果並不太理想,主要原因無法壓滿租用伺服器的CPU資源 。經過思考後決定采用新版本來寫壓測工具進行測試。
初始次壓測的邏輯比較簡單,從
Socket
接收數據經常框架事件分發到套用層,在套用層把數據讀取到一個臨時記憶體後再次寫入Socket發送給壓測端。
public classUserSession : SesionBase
{
publicUserSession()
{
}
privatebyte[] _data = newbyte[1024 * 8];
publicoverridevoidReceive(NetContext context, object message)
{
while (context.Reader.Length > 0)
{
var len = context.Reader.Read(_data, 0, _data.Length);
context.Writer.Write(_data, 0, len);
}
context.Writer.Flush();
}
publicoverridevoidConnected(NetContext context)
{
base.Connected(context);
}
}
在這裏並沒有直接返回會話接收的Byte[]連結串列,讀取出來並寫入更合一個網路通訊套用的基礎規範。
具體測試用壓測工具發起1000個連線,向伺服器發送封包,當接收到服務響應同樣長度的封包後再做二次請求,然後統計每秒產生的IO讀寫數據量並顯示,測試發送的內容分別是128,2K和16K字節。測試硬體環境是兩台A家雲的32核雲主機,網路介面卡是100Gb。以下是測試結果截
128字節
2K字節
16K字節
測試結果來看在發送128字節的測試中讀寫IO的總量基本已經達到了每秒270萬即每秒130萬的請求響應,而CPU基本處於滿負載狀態了。2K字節測試中CPU和IO量有下降出入頻寬和27Gb。當測試到16K字節的時候頻寬出入總量已經達到了43Gb,但cpu使用量不到50%顯然是頻寬受限了。
其實測試最有意義的還是第一項,看一下IO讀寫吞吐在相應CPU上的極限, 每秒 270萬的量說實話也是一個相當滿意的效果了。當然這只是一個元件最基礎的效能,後續會實作一個簡單的HTTP協定在協定分析的基礎上再進行效能測試。
BeetleX
開源跨平台通訊框架(支持TLS)
提供HTTP,Websocket,MQTT,Redis,RPC和服務閘道器開源元件
個人微信:henryfan128 QQ:28304340
關註公眾號
https://github.com/beetlex-io/