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代码:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();

Test.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
        <InvariantGlobalization>true</InvariantGlobalization>
        <PublishAot>true</PublishAot>


        <StackTraceSupport>false</StackTraceSupport>
        <OptimizationPreference>Size</OptimizationPreference>
        <PublishTrimmed>true</PublishTrimmed>
        <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
        <EventSourceSupport>false</EventSourceSupport>
        <HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
        <EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
        <MetadataUpdaterSupport>false</MetadataUpdaterSupport>
        <UseNativeHttpHandler>true</UseNativeHttpHandler>
        <TrimMode>link</TrimMode>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Yarp.ReverseProxy" Version="2.1.0" />
    </ItemGroup>

</Project>

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

使用以下指令构建aot程序

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

Nginx安装

在服务器中安装nginx

sudo apt install nginx

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

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

代理的服务

.NET 8 SDK

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

Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();

var app = builder.Build();


app.MapGet("/weatherforecast", () => string.Empty)
    .WithName("GetWeatherForecast");

app.Run();
5bba7e45adbb6a1f1546fda14b9ebe14.png

并且使用

chmod +x WebApplication1

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

./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压测结果:

75e4fcd1a3f63828626ee8fc6f57fb50.png

Nginx压测结果:

202cf55ab6e2477c46a90578367ae7f4.png

第二轮测试:

Yarp压测结果:

f7963c610b5909be4db6947f7274c0d1.png

Nginx压测结果:

8752120204ada7e08177fc3f257aa148.png

第三轮压测:

Yarp压测结果:

7f4123b420762367e63c660f58656c75.png

Nginx压测结果:

ef64836e748463bdac6e76b20b835286.png

结论

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

来自token的分享

技术交流群:737776595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值