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();

并且使用

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

Nginx 压测结果:

第二轮测试:

Yarp 压测结果:

Nginx 压测结果:

第三轮压测:

Yarp 压测结果:

Nginx 压测结果:

结论

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

来自 token 的分享

技术交流群:737776595

Yarp 与 Nginx性能大比拼不出所料它胜利了!的更多相关文章

  1. Zabbix监控nginx性能的另外一种方式

    Zabbix监控nginx性能的另外一种方式 nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有用,为了后续的zabbix监控,我们需要先启用nginx ...

  2. Nginx性能调优

    [调优]Nginx性能调优   一.Nginx优化配置 1.主配置文件优化:# vi /usr/local/nginx/conf/nginx.conf------------------------- ...

  3. Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)

    Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能!  Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...

  4. 突破10万高并发的nginx性能优化经验(含内核参数优化)

    写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...

  5. 关于nginx性能优化及基本概念

    参考文章: Nginx面试中最常见的18道题:http://blog.csdn.net/liyanlei5858/article/details/77924420 Nginx性能优化指南:http:/ ...

  6. 轻量级HTTP服务器Nginx(Nginx性能优化技巧)

    轻量级HTTP服务器Nginx(Nginx性能优化技巧)   文章来源于南非蚂蚁   一.编译安装过程优化 1.减小Nginx编译后的文件大小在编译Nginx时,默认以debug模式进行,而在debu ...

  7. Nginx性能优化参考

    nginx性能优化参考 1)调整配置文件中的配置项的值(配置文件:nginx.conf) worker_processes auto;开启的进程数,一般配置为跟逻辑CPU核数一样worker_rlim ...

  8. nginx性能优化技巧

    前几天买了本高俊峰的<高性能Linux服务器构建实战I>,网上都说运维必备手册,昨天看了目录加小50页感觉还是比较扩充视野的,很多东西在学校是不可能学到的,就是感觉有的地方讲的仍然不是很清 ...

  9. Nginx 性能调优

    原文地址:http://nginx.com/blog/tuning-nginx/ Tuning NGINX for Performance Nginx 性能调优 NGINX is well known ...

  10. 公共DNS性能大比拼

    ​ 今天中午,访问Gitee突然访问不进去,然后收到红薯通知:阿里云停止了 Gitee.com 的域名解析. ​ ​ 码云官方也随后给出解决办法 没有任何提示,没有任何提前通知,阿里云停止了 Gite ...

随机推荐

  1. 使用触发器和C#程序实现数据同步

    项目中用到了Quartz,也算是Quartz的一个示例. 源库创建数据同步表SYNC_DATA: CREATE TABLE SYNC_DATA( ID VARCHAR2(36) NOT NULL, T ...

  2. 深挖 Python 元组 pt.2

    哈喽大家好,我是咸鱼 在<深挖 Python 元组 pt.1>中我们了解 Python 元组的一些概念(索引和切片等),以及如何创建元组,最重要的是我们还介绍了元组的不可变特性 那么今天我 ...

  3. MyBatis-Plus (SpringBoot2 版)看这篇就足够了,一发入魂

    1.了解 Mybatis-plus 1.1.Mybatis-Plus 介绍 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简 ...

  4. AtCoder ARC 115 E - LEQ and NEQ (延迟标记线段树 or 笛卡尔积 + DP维护)

    问题链接:Here 长度为 \(N\) 的数列 \(A_1,-,A_N\) .回答满足以下条件的长度 \(N\) 的数列 \(X_1,-,X_N\) 的个数除以 \(998244353\) 的余数. ...

  5. 51 nod | 1007 正整数分组(背包DP)

    补题链接:Here 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 输入 第1行:一个数N,N为正 ...

  6. 一、@Configuration、@Conponent 、@ComponentScan 注解等

    一句话概括 区别: @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例.2. 可以直接调用方法,不需要 @Autowired 注入后使用. ...

  7. springboot启动流程 (2) 组件扫描

    SpringBoot的组件扫描是基于Spring @ComponentScan注解实现的,该注解使用basePackages和basePackageClasses配置扫描的包,如果未配置这两个参数,S ...

  8. 痞子衡嵌入式:我拿到了2023年度电子星球(eestar)年度黑马作者

    今天收到了「电源网旗下电子星球」 颁发的 2023 年度黑马作者奖牌,这是痞子衡继 2019 年和与非网合作后的第二个媒体平台颁发的奖项.这个奖牌做得很有质感,拿在手里沉甸甸的.此外与奖牌配套的还有一 ...

  9. Oracle19c 多字符集支持的PDB

    Oracle19c 多字符集支持的PDB 背景 想在一个数据库里面支持多种字符集 突然发现Oracle12c开始已经可以实现一个CDB下面可以有多个不同字符集的PDB了 所以想着今天验证一下. 环境信 ...

  10. [转帖]nginx 剖析 request_time和upstream_response_time的误区、区别

    https://cloud.tencent.com/developer/article/1767981 首先,澄清一个误区 upstream_response_time必须在upstream配置时才能 ...