戳下方名片,关注并星标!
回复“1024”获取2TB学习资源!
大家好,我是民工哥!
提到反向代理软件,大家肯定第一时间想到是:Nginx,没错,Nginx确实是一款非常优秀的反向代理软件,很多大厂都在使用,比如:微软。
不过,目前微软用它取代了 Nginx ,使得吞吐量提升了百分之八十!2021 年,微软将应用服务前端队列转换为 Kestrel + YARP。目前这个应用程序每天处理 160B+ 个 HTTP 请求,这是微软内部自己开发的一个应用程序,通过使用 .NET 的基础架构构建在 .NET 上的。
所以,今天我们一起来学习一下 YARP。
YARP 简介
Yarp(Yet Another Reverse Proxy)是一个反向代理工具包,用于使用ASP.NET和.NET基础设施并在.NET中构建快速代理服务器。Yarp是一个轻量级的.NET反向代理,支持HTTP和HTTPS协议,可以将请求转发到其他服务器上。
Yarp 基于.Net架构,因此可以在Windows和Linux上应用。Yarp最大的特点是可定制化,可以根据特定场景开发出需要的定制代理通道。你可以根据应用程序的特定需求进行自定义,使用规则来转发请求,并在转发请求时添加或修改HTTP头。
Github地址:https://github.com/microsoft/reverse-proxy
YARP 的功能特性
YARP具有许多主要特点,包括:
高度模块化:YARP设计成高度模块化的,可以根据需要替换或扩展内部组件,如HTTP请求路由、负载均衡、健康检查等。
高性能:YARP针对高性能进行了优化,利用.NET的异步编程模型和高效的IO操作,以处理大量并发连接。
配置驱动:YARP的行为可以通过配置来控制,支持从文件、数据库或其他来源动态加载配置。
可定制化:YARP最大的特点是可定制化,可以根据特定场景开发出需要的定制代理通道。
稳定可靠:YARP提供了主动和被动健康检查,还提供了多种问题诊断机制。
快速开始:YARP使开发人员能够完全控制,同时利用经过验证的ASP.NET Core和.NET功能集,以及C#(或其他.NET语言)的生产力。
此外,YARP还具有一些功能,如反向代理、负载均衡、限流(仅在使用.NET 7.0或更高版本时可用)、身份验证和授权、压缩、缓存、健康检查以及分布式跟踪等。
YARP 的使用场景
负载均衡:分发请求到后端多个服务器,提高系统的可伸缩性和可靠性。
内部网络隔离:隐藏内部服务器的IP地址,外部只能通过YARP访问内部服务器,从而保护内部网络的安全。
缓存和加速:缓存请求和响应,减少对后端服务器的请求,加速内容的传输。
身份验证和授权:通过集成的身份验证和授权机制,控制对后端服务器的访问,确保只有经过授权的用户才能访问特定的资源。
流量控制和限流:YARP可以限制来自外部的请求速率,防止潜在的DDoS攻击或其他恶意流量,保护服务器免受攻击。
日志和监控:记录请求和响应的详细日志,并提供对流量的监控和分析,帮助跟踪问题、分析性能瓶颈以及监控系统的健康。
API网关:在微服务架构中,YARP可以用作API网关,将来自客户端的请求路由到正确的微服务实例,并执行安全检查、速率限制等操作。
部署及使用
YARP 2.0.0 支持 ASP.NET Core 6.0 及更高版本。可以从 https://dotnet.microsoft.com/download/dotnet/ 下载 .NET SDK。
所以安装环境需要预先部署.Net环境,可以使用下面的命令检查:
dotnet --version
然后使用命令行创建一个空的 ASP.NET Core 项目
dotnet new web -n MyProxy -f net6.0
然后使用 nuget 管理工具手动添加包 Yarp.ReverseProxy,也可以使用命令模式添加
Install-Package Yarp.ReverseProxy
在Program.cs文件中注册Yarp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();
配置 appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ReverseProxy": {
"Routes": {
"route1" : {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"microsoft": {
"Address": "https://docs.microsoft.com/zh-cn/" },
"github":{
"Address": "https://github.com/"
}
}
}
}
}
配置完成后,运行项目即可,访问该站点将随机反向代理到微软官网和github,如下效果:更多操作及配置过程可参考:https://microsoft.github.io/reverse-proxy/articles/getting-started.html
YARP 与 Nginx
两者都具有相同的功能,在相关的配置上肯定是可相互替代的,接下来演示这部分的配置内容。
路由匹配
YARP提供了类似于Nginx的路由匹配功能。
#Nginx
/webapp
#YRAP
"route1" : {
"ClusterId": "cluster1",
"Match": {
"Path": "/webapp/{**catch-all}"
}
负载均衡
YARP 具有内置的负载均衡功能,可以根据请求的属性(如URL路径、请求头、客户端IP等)将其转发到多个后端服务器。
#Nginx 配置负载均衡
upstream backend {
server localhost:9002;
server localhost:9003;
}
server {
listen 8080;
server_name localhost;
location / {
# backend 就是服务器组的名称
proxy_pass http://backend/;
}
}
#YARP配置负载均衡
"Destinations": {
"APP1": {
"Address": "https://10.0.0.1:9999"
},
"APP2":{
"Address": "https://10.0.0.1:8888"
}
}
官方给出的实例:
地址重写
Nginx 中地址重写直接使用 rewrite
server {
location / {
limit_conn myip 10;
limit_conn myServerName 100;
rewrite / http://www.mingongge.com permanent;
}
Yarp 在 route中增加配置
"Transforms": [
{ "PathRemovePrefix": "/OMS" }
]
Forward 与 Timeout 配置
Forward配置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
YARP 默认 X-Forwarded-For,需要配置成 X-Forwarded-Proto,X-Forwarded-Host 可在 Transforms 中进行修改。
Timeout 配置
Nginx 超时配置
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
Yarp 超时配置
"HttpRequest": {
"ActivityTimeout": "<timespan>",#格式"ActivityTimeout": "00:00:30"
"Version": "<string>",
"VersionPolicy": ["RequestVersionOrLower", "RequestVersionOrHigher", "RequestVersionExact"],
"AllowResponseBuffering": "<bool>"
}
总结
YARP 给微软 Azure 应用服务带来巨大的提升:
吞吐量提高了近 80%。
Azure 应用的性能提升,降低了 CPU 使用率和内存占用率。
支持 HTTP/3 等现代协议。
支持新的客户方案,例如 gRPC 应用程序、主机密码套件配置、自定义错误页等。
由微软 .NET 核心团队开发的 Kestrel + YARP 这个创新技术还是非常有价值的,值得大家尝试引到自己的开发项目来。
— 特色专栏 —
MySQL|PostgreSQL|Redis|MongoDB|Tools
ElasticSearch|Kubernetes|Docker|Hadoop
Kafka|RabbitMQ|Zookeeper|OpenStack
企业监控平台|应用与服务|DevOps|集群管理
扔掉Navicat!来试试这款开源数据库管理工具
年终奖到账了!473662 元
面试这样说,HR喜欢听!成功率提高50%
马化腾回应微信“偷窥”相册!
新一代操作系统语言正崛起,打破C/C++垄断地位
华为开奖!2024 届校招薪资太吓人了!
公众号读者专属技术群
构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。
扫码加我好友,拉你进群
文章来源:https://www.toymoban.com/news/detail-795101.html
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!文章来源地址https://www.toymoban.com/news/detail-795101.html
到了这里,关于微软用它取代了 Nginx 性能提升了百分之八十!这也也太牛逼了吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!