Skip to content
Go back

YARP vs Nginx——.NET高性能API网关实战对比

Published:  at  12:00 AM

YARP vs Nginx——.NET高性能API网关实战对比

引言:API网关之争,YARP还是Nginx?🤔

在现代微服务架构中,API网关/反向代理的性能直接决定了系统的吞吐与响应速度。对于.NET开发者来说,选择微软推出的 YARP (Yet Another Reverse Proxy) 还是业界经典的 Nginx,一直是架构设计时的热门话题。

但“孰优孰劣”不能只凭口碑,必须用数据说话。本文基于同一API、相同硬件环境与一致的压力测试工具,对YARP和Nginx进行了系统性性能对比,希望为追求高性能、易集成的.NET技术团队提供一手参考。

本文适合:中高级.NET开发人员、关注API网关/反向代理性能的架构师与DevOps专家。


正文

测试方案设计:公平决斗,单点突破

测试API极简设计

为了让对比聚焦在网关本身,而非后端业务处理,我们采用了极其简单的.NET API:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () =>
{
    return Results.Ok("Hello world!");
});

app.Run();

如此设计确保了“谁快谁慢”归因于代理层,而非后端服务处理能力。

YARP配置:.NET生态天然亲和

YARP集成非常友好,尤其适合.NET项目:

builder.Services
    .AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

app.MapReverseProxy();

配置片段(JSON):

{
  "ReverseProxy": {
    "Routes": {
      "default": {
        "ClusterId": "hello",
        "Match": { "Path": "{**catch-all}" }
      }
    },
    "Clusters": {
      "hello": {
        "Destinations": {
          "destination1": {
            "Address": "http://hello.api:8080"
          }
        }
      }
    }
  }
}

想深入了解YARP负载均衡与鉴权,可参考相关实践

Nginx配置:Docker一把梭,经典不变

Nginx同样使用Docker快速部署,并设置最小可用配置实现与YARP功能等价:

http {
    upstream backend {
        server hello.api:8080;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

Docker Compose整合(节选):

services:
  yarp.proxy:
    ...
    ports:
      - 3000:8080
  nginx.proxy:
    ...
    ports:
      - '3001:80'

压力测试工具:k6标准化打靶

采用k6进行并发压测,分别针对YARP和Nginx端口发起同量级请求。

主要参数:10/50/100/200 VUs,每个VUs发起1000次请求。


性能数据:YARP vs Nginx,一图胜千言 📊

RPS(每秒请求数)对比

VUsYARP RPSNGINX RPS
10126929756
502708010614
1003243210324
2003666210169

YARP vs Nginx RPS对比图

解读:YARP吞吐量随着并发提升显著增长,而Nginx基本保持在1万上下。

p90/p95 延迟对比(单位:ms)

VUsYARP p90NGINX p90YARP p95NGINX p95
101.041.101.061.52
502.705.233.185.68
1004.6610.615.4310.96
2007.7721.238.8121.92

p90延迟对比 p95延迟对比

解读:并发压力上升时,YARP延迟依然可控;Nginx则线性增加,差距明显。


深度剖析:为何YARP表现优异?

⚠️ 注意:本文测试基于默认配置,Nginx如做极致调优有提升空间,但“即开即用”场景下YARP优势明显。


结论与实践建议 🏆

核心结论

落地建议


写在最后|欢迎交流你的看法!

你在实际项目中用过YARP或Nginx吗?有遇到什么性能瓶颈或踩坑经验?欢迎在评论区留言交流👇,或转发给你的架构小伙伴共同探讨!

如果你觉得本文有用,请点个赞或分享,让更多.NET技术人受益!🚀



Previous Post
模块化单体架构中的内部与公共 API:控制混乱,成就高质量系统
Next Post
ASP.NET Core单例中安全使用Scoped服务的实用指南