戳下方名片,關(guān)注并星標!
回復“1024”獲取2TB學習資源!
大家好,我是民工哥!
提到反向代理軟件,大家肯定第一時間想到是:Nginx,沒錯,Nginx確實是一款非常優(yōu)秀的反向代理軟件,很多大廠都在使用,比如:微軟。
不過,目前微軟用它取代了 Nginx ,使得吞吐量提升了百分之八十!2021 年,微軟將應用服務前端隊列轉(zhuǎn)換為 Kestrel + YARP。目前這個應用程序每天處理 160B+ 個 HTTP 請求,這是微軟內(nèi)部自己開發(fā)的一個應用程序,通過使用 .NET 的基礎(chǔ)架構(gòu)構(gòu)建在 .NET 上的。
所以,今天我們一起來學習一下 YARP。
YARP 簡介
Yarp(Yet Another Reverse Proxy)是一個反向代理工具包,用于使用ASP.NET和.NET基礎(chǔ)設(shè)施并在.NET中構(gòu)建快速代理服務器。Yarp是一個輕量級的.NET反向代理,支持HTTP和HTTPS協(xié)議,可以將請求轉(zhuǎn)發(fā)到其他服務器上。
Yarp 基于.Net架構(gòu),因此可以在Windows和Linux上應用。Yarp最大的特點是可定制化,可以根據(jù)特定場景開發(fā)出需要的定制代理通道。你可以根據(jù)應用程序的特定需求進行自定義,使用規(guī)則來轉(zhuǎn)發(fā)請求,并在轉(zhuǎn)發(fā)請求時添加或修改HTTP頭。
Github地址:https://github.com/microsoft/reverse-proxy
YARP 的功能特性
YARP具有許多主要特點,包括:
高度模塊化:YARP設(shè)計成高度模塊化的,可以根據(jù)需要替換或擴展內(nèi)部組件,如HTTP請求路由、負載均衡、健康檢查等。
高性能:YARP針對高性能進行了優(yōu)化,利用.NET的異步編程模型和高效的IO操作,以處理大量并發(fā)連接。
配置驅(qū)動:YARP的行為可以通過配置來控制,支持從文件、數(shù)據(jù)庫或其他來源動態(tài)加載配置。
可定制化:YARP最大的特點是可定制化,可以根據(jù)特定場景開發(fā)出需要的定制代理通道。
穩(wěn)定可靠:YARP提供了主動和被動健康檢查,還提供了多種問題診斷機制。
快速開始:YARP使開發(fā)人員能夠完全控制,同時利用經(jīng)過驗證的ASP.NET Core和.NET功能集,以及C#(或其他.NET語言)的生產(chǎn)力。
此外,YARP還具有一些功能,如反向代理、負載均衡、限流(僅在使用.NET 7.0或更高版本時可用)、身份驗證和授權(quán)、壓縮、緩存、健康檢查以及分布式跟蹤等。
YARP 的使用場景
負載均衡:分發(fā)請求到后端多個服務器,提高系統(tǒng)的可伸縮性和可靠性。
內(nèi)部網(wǎng)絡(luò)隔離:隱藏內(nèi)部服務器的IP地址,外部只能通過YARP訪問內(nèi)部服務器,從而保護內(nèi)部網(wǎng)絡(luò)的安全。
緩存和加速:緩存請求和響應,減少對后端服務器的請求,加速內(nèi)容的傳輸。
身份驗證和授權(quán):通過集成的身份驗證和授權(quán)機制,控制對后端服務器的訪問,確保只有經(jīng)過授權(quán)的用戶才能訪問特定的資源。
流量控制和限流:YARP可以限制來自外部的請求速率,防止?jié)撛诘腄DoS攻擊或其他惡意流量,保護服務器免受攻擊。
日志和監(jiān)控:記錄請求和響應的詳細日志,并提供對流量的監(jiān)控和分析,幫助跟蹤問題、分析性能瓶頸以及監(jiān)控系統(tǒng)的健康。
API網(wǎng)關(guān):在微服務架構(gòu)中,YARP可以用作API網(wǎng)關(guān),將來自客戶端的請求路由到正確的微服務實例,并執(zhí)行安全檢查、速率限制等操作。
部署及使用
YARP 2.0.0 支持 ASP.NET Core 6.0 及更高版本??梢詮?https://dotnet.microsoft.com/download/dotnet/ 下載 .NET SDK。
所以安裝環(huán)境需要預先部署.Net環(huán)境,可以使用下面的命令檢查:
dotnet?--version
然后使用命令行創(chuàng)建一個空的 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/"?
???????}?
??????}?
????}?
??}?
}
配置完成后,運行項目即可,訪問該站點將隨機反向代理到微軟官網(wǎng)和github,如下效果:更多操作及配置過程可參考:https://microsoft.github.io/reverse-proxy/articles/getting-started.html
YARP 與 Nginx?
兩者都具有相同的功能,在相關(guān)的配置上肯定是可相互替代的,接下來演示這部分的配置內(nèi)容。
路由匹配
YARP提供了類似于Nginx的路由匹配功能。
#Nginx?
/webapp
#YRAP
?????"route1"?:?{
???????"ClusterId":?"cluster1",
???????"Match":?{
?????????"Path":?"/webapp/{**catch-all}"
???????}
負載均衡
YARP 具有內(nèi)置的負載均衡功能,可以根據(jù)請求的屬性(如URL路徑、請求頭、客戶端IP等)將其轉(zhuǎn)發(fā)到多個后端服務器。
#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>"
}
總結(jié)
YARP 給微軟 Azure 應用服務帶來巨大的提升:
吞吐量提高了近 80%。
Azure 應用的性能提升,降低了 CPU 使用率和內(nèi)存占用率。
支持 HTTP/3 等現(xiàn)代協(xié)議。
支持新的客戶方案,例如 gRPC 應用程序、主機密碼套件配置、自定義錯誤頁等。
由微軟 .NET 核心團隊開發(fā)的 Kestrel + YARP 這個創(chuàng)新技術(shù)還是非常有價值的,值得大家嘗試引到自己的開發(fā)項目來。
—? ?特色專欄??—
?MySQL|PostgreSQL|Redis|MongoDB|Tools
ElasticSearch|Kubernetes|Docker|Hadoop
?Kafka|RabbitMQ|Zookeeper|OpenStack
企業(yè)監(jiān)控平臺|應用與服務|DevOps|集群管理
扔掉Navicat!來試試這款開源數(shù)據(jù)庫管理工具
年終獎到賬了!473662 元
面試這樣說,HR喜歡聽!成功率提高50%
馬化騰回應微信“偷窺”相冊!
新一代操作系統(tǒng)語言正崛起,打破C/C++壟斷地位
華為開獎!2024 屆校招薪資太嚇人了!
公眾號讀者專屬技術(shù)群
構(gòu)建高質(zhì)量的技術(shù)交流社群,歡迎從事后端開發(fā)、運維技術(shù)進群(備注崗位,已在技術(shù)交流群的請勿重復添加)。主要以技術(shù)交流、內(nèi)推、行業(yè)探討為主,請文明發(fā)言。廣告人士勿入,切勿輕信私聊,防止被騙。
掃碼加我好友,拉你進群
文章來源:http://www.zghlxwxcb.cn/news/detail-795101.html
PS:因為公眾號平臺更改了推送規(guī)則,如果不想錯過內(nèi)容,記得讀完點一下“在看”,加個“星標”,這樣每次新文章推送才會第一時間出現(xiàn)在你的訂閱列表里。點“在看”支持我們吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-795101.html
到了這里,關(guān)于微軟用它取代了 Nginx 性能提升了百分之八十!這也也太牛逼了吧的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!