當前位置: 妍妍網 > 碼農

【BeetleX重構】TLS和多數據型別效能測試

2024-06-07碼農

上一篇針對元件實作的簡單HTTP服務進行了一個壓力測試,而這一篇主要針對的是HTTPS和不同序列化元件響應體中的效能測試。透過以上測試看一下元件在添加TLS後對效能的損耗和不同 序列化元件在HTTP中使用的效果。

這一次的測試邏輯和結構對比之前的相對復雜一些,方法會判斷請求響應的型別和數量,具體邏輯程式碼如下:

public classHttpSession : SesionBase{publicoverridevoidReceive(NetContext context, object message) {var request = (HttpRequest)message;int count = 1; BodyType type = BodyType.Json;if (!string.IsNullOrEmpty(request.QueryString)) {string[] values = request.QueryString.Split('=');if (values.Length == 1) {int.TryParse(values[0], out count); }else { Enum.TryParse<BodyType>(values[0], out type);int.TryParse(values[1], out count); } } HttpResponse response = new HttpResponse(); UserProtos userProtos = new UserProtos(); List<User> data = new List<User>();for (int i = 0; i < count; i++) {if (type != BodyType.Protobuf) { User item = new User(); item.Name = $"Henry{i}"; item.Time = DateTime.Now; item.Email = "[email protected]"; item.City = "guangzhou"; item.Age = i; data.Add(item); }else { UserProto item = new UserProto(); item.Name = $"Henry{i}"; item.Time = DateTime.Now.Ticks; item.Email = "[email protected]"; item.City = "guangzhou"; item.Age = i; userProtos.Items.Add(item); } }if (type == BodyType.Json) { response.SetJson(data); }elseif (type == BodyType.Protobuf) { response.SetProtobuf(userProtos); }elseif (type == BodyType.MessagePack) { response.SetMessagePack(data); } response.Write(context.Writer); context.Writer.Flush(); }}

在測試中發現Protobuf.Net這個元件在多執行緒高並行下元件存在嚴重效能問題,所以改用Google.Protobuf.net,但這個元件使用起來就沒這麽方便了。

測試環境
伺服器:A家雲32核發計算型伺服器 windows 2019
壓測端: A家雲 32核發計算型伺服器 ubuntu 18, 工具:wrk

HTTP/HTTPS測試
由於只測試兩者間的開銷差異,所以只測試了JSON返回,分別請求響應一個物件和20個物件;測試結果如下:


從測試結果來看開啟TLS的損耗還是比較大的,基本都在30%-40%的區間。由於是純測試網路所以感覺 損耗比較大,實際套用中網路通訊占比不高的情況這個損耗就並不太重要了,畢竟有很多數據業務存在很多資料庫IO處理和運算邏輯。

響應物件測試
這次測試響應物件型別有JSON,Protobuf和MessagePack,返回記錄數分別是:1,20和50條。具體測試情況如下:

  • 1條記錄


  • 20條記錄

  • 50條記錄



  • 從結果來看Google.Protobuf.net元件基本是最優的選擇了,效率高低頻寬。如果只是互動小物件那System.Text.Json也是非常不錯的選擇,效率高協定可見使用方便。

    後續重新更新techempower上的測試程式碼,這樣更好驗證BeetleX重構的效果是好是壞,畢竟現在測的硬體資源都比較充裕的; techempower的測試太久沒更新已經排到20開外了。

    以下是這次測試的伺服端(暫沒編譯Linux端,如果有需要可以留言)

    連結:https://pan.baidu.com/s/1WTjFpJ7ze28ih8hQ92BTbQ?pwd=okf9

    提取碼:okf9

    BeetleX

    開源跨平台通訊框架(支持TLS)

    提供HTTP,Websocket,MQTT,Redis,RPC和服務閘道器開源元件

    個人微信:henryfan128 QQ:28304340

    關註公眾號

    https://github.com/beetlex-io/