内容简介:本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比为了确保测试的基础功能一致性,因此所有测试的url和请求输出内容都是一致。以下是针对BeetleX和Asp.net Core实现的WebaApi基础功能代码:通过bombardier.exe工具对两个服务开启100个连接并进行10000000次请求响应测试。测试的url如下:
本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比
测试环境描述
硬件配置:E1230V2 16G内存 10Gb带宽 操作系统:Windows server 2008 R2 + .Net Core 2.15 测试工具:bombardier.exe
测试功能代码
为了确保测试的基础功能一致性,因此所有测试的url和请求输出内容都是一致。以下是针对BeetleX和Asp.net Core实现的WebaApi基础功能代码:
asp.net core mvc webapi
public class HomeController : Controller { public class JsonMessage { public string message { get; set; } } public string plaintext() { return "Hello, World!"; } public object json() { return new JsonMessage { message = "Hello, World!" }; } public Employee Employee(int id) { Employee result = DataHelper.Defalut.Employees.Find(e => e.EmployeeID == id); if (result == null) result = new Employee(); return result; } public object Orders(int id, string customerid, int index, int size) { Func<Order, bool> exp = o => (id == 0 || o.EmployeeID == id) && (string.IsNullOrEmpty(customerid) || o.CustomerID == customerid); int count = DataHelper.Defalut.Orders.Count(exp); if (size == 0) size = 10; int pages = count / size; if (count % size > 0) pages++; var items = DataHelper.Defalut.Orders.Where(exp).Skip(index * size).Take(size); return items; } }
beetlex webapi
[Controller(BaseUrl = "Home")] public class Controller { public class JsonMessage { public string message { get; set; } } public object plaintext() { return new TextResult("Hello, World!"); } public object json() { return new JsonResult(new JsonMessage { message = "Hello, World!" }); } [Get(Route = "{id}")] public object Employee(int id) { Employee result = DataHelper.Defalut.Employees.Find(e => e.EmployeeID == id); if (result == null) result = new Employee(); return new JsonResult(result); } [Get(Route = "{id}")] public object Orders(int id, string customerid, int index, int size) { Func<Order, bool> exp = o => (id == 0 || o.EmployeeID == id) && (string.IsNullOrEmpty(customerid) || o.CustomerID == customerid); int count = DataHelper.Defalut.Orders.Count(exp); if (size == 0) size = 10; int pages = count / size; if (count % size > 0) pages++; var items = DataHelper.Defalut.Orders.Where(exp).Skip(index * size).Take(size); return new JsonResult(items); } }
测试方式
通过bombardier.exe工具对两个服务开启100个连接并进行10000000次请求响应测试。测试的url如下:
/home/plaintext //返回一个简单的Hello, World!文本 /home/json //返回一个简单的Hello, World! json对象 /home/employee/3 //返回一个记员的json对象 /home/orders/3?index=0&size=5 //返回对应雇员订单列表的json对象
测试结果
从测试结果来看在最基本的内容输出时,主要涉及是网络处理这一块,在这方面Beetlex webapi有着绝对性能的优势,可以说比Asp.net Core webapi高出两倍之多。但随着加入一些json处理功能逻辑处理占用比率高后性能的差异就不是非常突出(也说明一点Newtonsoft.Json在处理json的时候没有.net coret自己的处理高效),不过即使在后面返回订单列表的时候还具备着一倍的性能优势在。为了更进一步测试BeetleX的处理能,已经把测试代码提交上TechEmpower/FrameworkBenchmarks,在一下轮测试应该能看到BeetleX的身影出现。
测试结果详细数据
asp core webapi
D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/plaintext" Bombarding http://192.168.2.18:8080/home/plaintext with 10000000 request(s) usin g 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m14s Done! Statistics Avg Stdev Max Reqs/sec 74691.94 3817.11 114988.50 Latency 1.33ms 488.74us 385.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 17.38MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/json" Bombarding http://192.168.2.18:8080/home/json with 10000000 request(s) using 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m24s Done! Statistics Avg Stdev Max Reqs/sec 69093.60 3770.80 83161.12 Latency 1.44ms 549.52us 385.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 17.13MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/employee/3" Bombarding http://192.168.2.18:8080/home/employee/3 with 10000000 request(s) usi ng 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 3m15s Done! Statistics Avg Stdev Max Reqs/sec 51224.14 2667.55 57796.82 Latency 1.95ms 637.04us 415.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 29.16MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/orders/3?in dex=0&size=5" Bombarding http://192.168.2.18:8080/home/orders/3?index=0&size=5 with 10000000 r equest(s) using 100 connection(s) 10000000 / 10000000 [===========================================] 100.00% 5m7s Done! Statistics Avg Stdev Max Reqs/sec 32481.62 1568.13 36897.79 Latency 3.07ms 2.13ms 600.03ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 57.96MB/s
beetlex webapi
D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/plaintext" Bombarding http://192.168.2.18:9090/home/plaintext with 10000000 request(s) usin g 100 connection(s) 10000000 / 10000000 [============================================] 100.00% 41s Done! Statistics Avg Stdev Max Reqs/sec 239341.58 39420.70 261535.62 Latency 413.11us 1.02ms 396.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 41.56MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/json" Bombarding http://192.168.2.18:9090/home/json with 10000000 request(s) using 100 connection(s) 10000000 / 10000000 [============================================] 100.00% 54s Done! Statistics Avg Stdev Max Reqs/sec 184345.82 24707.02 208438.54 Latency 537.74us 1.07ms 395.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 34.64MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/employee/3" Bombarding http://192.168.2.18:9090/home/employee/3 with 10000000 request(s) usi ng 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 1m12s Done! Statistics Avg Stdev Max Reqs/sec 138350.49 15090.09 162791.05 Latency 717.80us 1.14ms 397.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 70.33MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/orders/3?in dex=0&size=5" Bombarding http://192.168.2.18:9090/home/orders/3?index=0&size=5 with 10000000 r equest(s) using 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m26s Done! Statistics Avg Stdev Max Reqs/sec 68505.91 3209.14 72597.10 Latency 1.46ms 2.14ms 599.03ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 118.06MB/s
完整测试代码
https://github.com/IKende/FastHttpApi/tree/master/PerformanceTest/Beetlex_VS_AspCore_webapi
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kubernetes 存储性能对比
- 快排和堆排性能对比
- 性能压测工具选型对比
- 性能对比:ReentrantLock vs Synchronized
- Mobx 与 Redux 的性能对比
- Protobuf的使用及性能对比测试
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python Algorithms
Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99
Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!