经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
Yarp 与 Nginx性能大比拼不出所料它胜利了!
来源:cnblogs  作者:tokengo  时间:2024/2/2 9:13:03  对本文有异议

Yarp 与 Nginx 性能大比拼

测试环境:

Ubuntu 22.04.3 LTS (GNU/Linux 6.5.0-14-generic x86_64)

Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz *2

运行内存:94.3G

yarp 环境

.NET 8 SDK

Program.cs代码:

  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddReverseProxy()
  3. .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
  4. var app = builder.Build();
  5. app.MapReverseProxy();
  6. app.Run();

Test.csproj

  1. <Project Sdk="Microsoft.NET.Sdk.Web">
  2. <PropertyGroup>
  3. <TargetFramework>net8.0</TargetFramework>
  4. <Nullable>enable</Nullable>
  5. <ImplicitUsings>enable</ImplicitUsings>
  6. <InvariantGlobalization>true</InvariantGlobalization>
  7. <PublishAot>true</PublishAot>
  8. <StackTraceSupport>false</StackTraceSupport>
  9. <OptimizationPreference>Size</OptimizationPreference>
  10. <PublishTrimmed>true</PublishTrimmed>
  11. <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
  12. <EventSourceSupport>false</EventSourceSupport>
  13. <HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
  14. <EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
  15. <MetadataUpdaterSupport>false</MetadataUpdaterSupport>
  16. <UseNativeHttpHandler>true</UseNativeHttpHandler>
  17. <TrimMode>link</TrimMode>
  18. </PropertyGroup>
  19. <ItemGroup>
  20. <PackageReference Include="Yarp.ReverseProxy" Version="2.1.0" />
  21. </ItemGroup>
  22. </Project>

参考 Native AOT deployment overview - .NET | Microsoft Learn 在服务器中安装 aot 环境

使用以下指令构建 aot 程序

  1. dotnet publish -c Release -r linux-x64 --self-contained true /p:PublishAot=true --output ../output

Nginx 安装

在服务器中安装 nginx

  1. sudo apt install nginx

/etc/nginx/conf.d目录下创建一个 wwwroot.conf

  1. server {
  2. listen 7771;
  3. server_name localhost;
  4. location / {
  5. add_header 'Access-Control-Allow-Origin' 'http://localhost:8088';
  6. add_header 'Cache-Control' 'public, max-age=604800';
  7. add_header 'Access-Control-Allow-Credentials' 'true';
  8. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  9. rewrite ^/proxy/bing/(.*)$ /$1 break;
  10. proxy_pass http://127.0.0.1:7777/;
  11. }
  12. }

代理的服务

.NET 8 SDK

创建一个用于测试的代理服务,提供一个简单的接口,直接返回空的字符串。我们将这个服务发布成 linux-64 的程序,

Program.cs

  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddEndpointsApiExplorer();
  3. var app = builder.Build();
  4. app.MapGet("/weatherforecast", () => string.Empty)
  5. .WithName("GetWeatherForecast");
  6. app.Run();

并且使用

  1. chmod +x WebApplication1

然后启动我们的代理测试端点

  1. ./WebApplication1 urls="http://*:7777"

使用的测试工具

Apipost-Team/runnerGo: A tool similar to apache bench (ab) (github.com)

由 ApiPOST 开源的基于 Go 语言实现的压测工具,我们去 Release 下载发布好的 win-64 位程序,然后执行,

然后打开测试界面runnerGo UI (apipost.cn)

压测结果

http://192.168.31.251:7772/weatherforecast Yarp 代理的服务

http://192.168.31.251:7771/weatherforecast Nginx 代理的服务

第一轮测试:

YARP 压测结果:

Nginx 压测结果:

第二轮测试:

Yarp 压测结果:

Nginx 压测结果:

第三轮压测:

Yarp 压测结果:

Nginx 压测结果:

结论

以上测试都是在内网测试,都属于同一个局域网,由测试结果得出 Yarp 基本完胜 Nginx,虽然说基本性能超越,但是 Yarp 也并非完全可替代 Nginx,Nginx 是支持 TCP/UDP 代理的,而 Yarp 默认是只支持 Http 协议的代理。

来自 token 的分享

技术交流群:737776595

原文链接:https://www.cnblogs.com/hejiale010426/p/17998403

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号