BeetleX和Asp.net Core之webapi基础性能对比

栏目: ASP.NET · 发布时间: 5年前

内容简介:本文主要针对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和Asp.net Core之webapi基础性能对比

从测试结果来看在最基本的内容输出时,主要涉及是网络处理这一块,在这方面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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Algorithms

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》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具