当前位置: 欣欣网 > 码农

【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/