zoukankan      html  css  js  c++  java
  • .net core下,Ocelot网关与Spring Cloud Gateway网关的对比测试

    有感于 myzony 发布的 针对 Ocelot 网关的性能测试 ,并且公司下一步也需要对.net和java的应用做一定的整合,于是对Ocelot网关、Spring Cloud Gateway网关做个了对比测试,使用了wrk进行测试

    .net core + Spring Cloud Gateway 是使用 steeltoe 工具接入注册中心Spring Cloud Eureka,共Spring Cloud Gateway调用

    应用服务器环境 windows server 2008  .net core 2.2  java 1.8

    172.16.1.65   部署   Ocelot的.net core接口-6002、Spring Cloud Gateway的spring boot接口-9004、Spring Cloud Gateway的.net core接口-9001

    172.16.1.68   部署   Ocelot的.net core接口-6004、Spring Cloud Gateway的spring boot接口-9004、Spring Cloud Gateway的.net core接口-9001

    172.16.1.120 部署   Ocelot网关-6000、Spring Cloud Eureka注册中心-7000 + Spring Cloud Gateway网关-8000

    测试工具 wrk  参数统一为  -t 50 -c 10000 -d 60s --latency --timeout 3s 

    测试服务器环境 centos 7.5   172.16.1.144,并根据 wrk的报错修改了最大打开文件数限制

    测试结果汇总如下图

     

    可以看出Ocelot的总请求数、QPS比Gateway高不少,而且超时数也少,但是平均响应时间要比Gateway高不少。

    总体上来说,两者基本上处于同一水平,对于一般的企业业务系统足够了,因为上面的测试的都没有涉及业务处理,系统瓶颈不应该是在网关。

    考虑我们公司的实际情况,倾向使用 .net core+spring cloud gateway,这样大家各自做各自的,只需要做好接入就好了。

    测试结果明细

    1. 直测.net core接口  QPS: 51305.10
    wrk -t 50 -c 10000 -d 60s --latency --timeout 3s http://172.16.1.65:9001/user/get
      50 threads and 10000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   153.83ms  390.10ms   3.00s    90.15%
        Req/Sec     1.04k   495.03    28.76k    78.30%
      Latency Distribution
         50%    4.64ms
         75%    5.33ms
         90%  534.34ms
         99%    1.98s 
      3082512 requests in 1.00m, 440.96MB read
      Socket errors: connect 0, read 4777, write 4800, timeout 23227
    Requests/sec:  51305.10
    Transfer/sec:      7.34MB

      2.  直测spring boot 接口 QPS: 45933.02

    wrk -t 50 -c 10000 -d 60s --latency --timeout 3s http://172.16.1.65:9004/user/get
      50 threads and 10000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   222.69ms  439.08ms   3.00s    87.63%
        Req/Sec     0.93k   320.20     4.28k    69.47%
      Latency Distribution
         50%    6.25ms
         75%  306.19ms
         90%  776.66ms
         99%    2.10s 
      2760646 requests in 1.00m, 342.67MB read
      Socket errors: connect 0, read 2169, write 5481, timeout 20834
    Requests/sec:  45933.02
    Transfer/sec:      5.70MB

    3. .net core 接口(65:6002、68:6004) + ocelot  QPS:9068.52

    wrk -t 50 -c 10000 -d 60s --latency --timeout 3s http://172.16.1.120:6000/api/values/
      50 threads and 10000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   849.82ms  287.67ms   3.00s    74.12%
        Req/Sec   190.05    119.66     5.26k    67.26%
      Latency Distribution
         50%  840.16ms
         75%  999.96ms
         90%    1.18s 
         99%    1.69s 
      545037 requests in 1.00m, 90.96MB read
      Socket errors: connect 0, read 11, write 2905, timeout 1181
      Non-2xx or 3xx responses: 3
    Requests/sec:   9068.52
    Transfer/sec:      1.51MB

    4. spring boot 接口(65:9004、68:9004) + spring cloud gateway    QPS:7497.19

    wrk -t 50 -c 10000 -d 60s --latency --timeout 3s http://172.16.1.120:8000/user-service/user/get 
      50 threads and 10000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   174.39ms   96.40ms   2.98s    68.88%
        Req/Sec   220.62    288.26     4.25k    92.94%
      Latency Distribution
         50%  163.92ms
         75%  236.53ms
         90%  297.77ms
         99%  404.96ms
      450571 requests in 1.00m, 56.72MB read
      Socket errors: connect 0, read 0, write 279597, timeout 1490
    Requests/sec:   7497.19
    Transfer/sec:      0.94MB

    5. .net core 接口(65:9001、68:9001) + spring cloud gateway    QPS:7762.32

    wrk -t 50 -c 10000 -d 60s --latency --timeout 3s http://172.16.1.120:8000/user-service/user/get  
      50 threads and 10000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   174.75ms   85.90ms   2.98s    74.25%
        Req/Sec   211.85    244.15     2.78k    93.53%
      Latency Distribution
         50%  165.13ms
         75%  220.84ms
         90%  276.64ms
         99%  392.74ms
      466503 requests in 1.00m, 66.73MB read
      Socket errors: connect 0, read 0, write 250560, timeout 1407
    Requests/sec:   7762.32
    Transfer/sec:      1.11MB

    .net core 所有应用,在Startup中关闭日志

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddLogging(op => op.ClearProviders());
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            }

    Ocelot 网关,在Startup中关闭日志,注释掉mvc的注入和使用

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddLogging(op => op.ClearProviders());
                services.AddOcelot(Configuration);
    
                //services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                app.UseOcelot().Wait();
    
                //app.UseMvc(routes => {
                //    routes.MapRoute(
                //        name: "default",
                //        template: "{controller=Home}/{action=Index}/{id?}");
                //});
              
            }
  • 相关阅读:
    Golang的安装包方法
    Debian kvm网络配置
    Debian-Linux配置网卡网络方法
    KVM虚拟机网络配置 Bridge方式,NAT方式
    WebRTC之框架与接口
    WebRTC
    关于golang.org/x包问题
    http内网转发
    linux服务器可以访问IP访问不了域名地址
    golang--生成某区间的随机数
  • 原文地址:https://www.cnblogs.com/zyh1989/p/10457296.html
Copyright © 2011-2022 走看看