⚖️ مقیاسپذیری افقی (Horizontally Scaling) در ASP.NET Core APIs با استفاده از YARP Load Balancingاپلیکیشنهای وب مدرن باید بتوانند تعداد فزایندهای از کاربران را سرویسدهی کنند و افزایش ناگهانی ترافیک را مدیریت نمایند.
زمانی که یک سرور به حد نهایی ظرفیت خود میرسد، عملکرد آن کاهش یافته و منجر به کندی پاسخها، خطاها یا حتی از کار افتادن کامل (downtime) میشود.
Load Balancing
یک تکنیک کلیدی برای مقابله با این چالشها و بهبود Scalability اپلیکیشن شما است. ⚙️
در این مقاله بررسی خواهیم کرد:
• چگونه از YARP (Yet Another Reverse Proxy) برای پیادهسازی Load Balancing استفاده کنیم
• چگونه از Horizontal Scaling برای بهبود عملکرد بهره ببریم
• چگونه از K6 بهعنوان ابزار Load Testing استفاده کنیم
در ادامه، به مفهوم Load Balancing، اهمیت آن و نحوهای که YARP این فرآیند را برای اپلیکیشنهای NET. سادهتر میکند، خواهیم پرداخت.
🧱 انواع مقیاسپذیری نرمافزار (Types of Software Scalability)
قبل از اینکه وارد جزئیات YARP و Load Balancing شویم، بیایید اصول اولیهی Scaling را مرور کنیم.
دو رویکرد اصلی برای مقیاسپذیری وجود دارد:
🔹 Vertical Scaling
در این روش، سرورهای موجود با سختافزار قویتر ارتقا مییابند — افزایش تعداد هستههای CPU، حافظه RAM و فضای ذخیرهسازی سریعتر.
اما این روش چند محدودیت دارد:
هزینهها بهسرعت افزایش مییابد و در نهایت به یک سقف عملکرد (performance ceiling) خواهید رسید.
🔹 Horizontal Scaling
در این روش، سرورهای بیشتری به زیرساخت خود اضافه میکنید و بار کاری را بهصورت هوشمندانه میان آنها توزیع میکنید.
این رویکرد پتانسیل مقیاسپذیری بسیار بیشتری دارد، زیرا میتوانید با افزودن سرورهای جدید، ترافیک بیشتر را مدیریت کنید.
اینجاست که Load Balancing وارد عمل میشود — و YARP در این زمینه بهخوبی میدرخشد. ✨
🧭 افزودن یک Reverse Proxy
YARP
یک کتابخانهی Reverse Proxy با کارایی بالا از مایکروسافت است.این ابزار برای معماریهای مدرن microservice طراحی شده است.Reverse Proxy در جلوی سرورهای backend شما قرار میگیرد و نقش مدیر ترافیک (traffic director) را ایفا میکند. 🚦
راهاندازی YARP بسیار ساده است:
• پکیج YARP NuGet را نصب میکنید،
• یک تنظیم ساده برای تعریف مقاصد backend میسازید،
• و سپس YARP middleware را فعال میکنید.
YARP
این امکان را میدهد تا قبل از رسیدن درخواستها به سرورهای backend، مسیریابی (routing) و تبدیل (transformation) روی آنها انجام دهید.
🧩 مرحلهی اول: نصب پکیج YARP
Install-Package Yarp.ReverseProxy
⚙️ مرحلهی دوم: پیکربندی سرویسها و افزودن Middleware
در این مرحله، سرویسهای موردنیاز را پیکربندی کرده و YARP middleware را به Request Pipeline معرفی میکنیم:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();
🧾 مرحلهی سوم: افزودن تنظیمات YARP در appsettings.json
در این فایل، YARP از مفهوم Routes برای نمایش درخواستهای ورودی به Reverse Proxy و از Clusters برای تعریف سرویسهای پاییندستی (downstream services) استفاده میکند.
الگوی {**catch-all} به ما اجازه میدهد تمام درخواستهای ورودی را بهراحتی مسیردهی کنیم.
{
"ReverseProxy": {
"Routes": {
"api-route": {
"ClusterId": "api-cluster",
"Match": {
"Path": "{**catch-all}"
},
"Transforms": [{ "PathPattern": "{**catch-all}" }]
}
},
"Clusters": {
"api-cluster": {
"Destinations": {
"destination1": {
"Address": "http://api:8080"
}
}
}
}
}
}این پیکربندی، YARP را بهصورت یک Pass-through Proxy تنظیم میکند.
اما حالا بیایید آن را بهروزرسانی کنیم تا از مقیاسپذیری افقی (Horizontal Scaling) پشتیبانی کند. 🚀