通讯组件最能反映真实性能还是需要实现一个相应的应用来进行测试,并由第三方工具提供结果,只有这样做测出来的结果才更具客观性。使用BeetleX实现一个简单的通过用的HTTP服务也是非常简单的事情,协议分析大概几百行代码的工作量,然后再抽取出Request和Response结构方便使用即可,具体实现可以从以下地址获取
//github.com/beetlex-io/BeetleX.Light/blob/main/Samples/BaseHttpPerformance.cs
本次测试的用例也比较简单,根据请求给测试端响应相应数量的Json对象,这种场景应该在webapi中是比较常见的一种情况了。具体代码如下:
public class HttpSession : SesionBase
{
public override void Receive(NetContext context, object message)
{
var request = (HttpRequest)message;
if (!int.TryParse(request.QueryString, out var count))
{
count = 1;
}
HttpResponse response = new HttpResponse();
List<object> data = new List<object>();
for (int i = 0; i < count; i++)
{
data.Add(new { Text = "Hello World", Time = DateTime.Now });
}
response.SetJson(data);
context.Send(response);
}
}
测试工具则使用开源的wrk,这工具也是TechEmpower网站用来压测各大web框架的压测工具。测试环境还是使用A家云32核抢占式云服务器,web服务器使用windows2019(也许有人问为什么不用linux?其实是为了方便...),测试端用Ubuntu.
测试用例:分别是响应1,10,50和100个对象列表。
测试结果如下:
返回一条记录用例测试结果达到了110W RPS!响应的100条的测试结果是32W RPS输出带宽已经达到16Gb了。所有测试用例的CPU基本都跑爆了,从结果可以看到JSON序列化也是非常损耗CPU资源了。
通过上面的图能猜到A家云的母鸡配置吗?wrk当前跑着百万RPS请求测试.(由于云主机分配的资源可能存在差异,同样配置的云主机性上也可能有差异)
测试结果比较满足,后续会针对Json,Protobuf和MessagePacket的Http body响应做一个对比。
下面推荐两款高性能的HTTP测试组件,使用起来都是非常方便!
//github.com/wg/wrk (只支持linux,c编写)
//github.com/codesenberg/bombardier (支持linux/win, go编写)
BeetleX
开源跨平台通讯框架(支持TLS)
提供HTTP,Websocket,MQTT,Redis,RPC和服务网关开源组件
个人微信:henryfan128 QQ:28304340
关注公众号
https://github.com/beetlex-io/