⚙️ موارد پیشرفته در Rate Limiting (محدودسازی نرخ) در NET.
محدودسازی نرخ (Rate Limiting) به معنای محدود کردن تعداد درخواستها به برنامه شماست. این محدودیت معمولاً در یک بازه زمانی خاص یا بر اساس معیارهای دیگر اعمال میشود. ⏱️
🛡 دلایل اهمیت Rate Limiting
محدودسازی نرخ به دلایل زیر بسیار مفید است:
• امنیت را بهبود میبخشد.
• در برابر حملات DDoS محافظت میکند.
• از Overloading (بارگذاری بیش از حد) سرورهای برنامه جلوگیری میکند.
• با جلوگیری از مصرف غیرضروری منابع، هزینهها را کاهش میدهد.
نکته: در حالی که NET 7. با یک Rate Limiter داخلی عرضه شد، اما باید بدانید که چگونه آن را به درستی پیادهسازی کنید تا سیستم شما دچار توقف نشود. 🛑
🎯 در این پست خواهید آموخت:
🔹️ چگونه کاربران را بر اساس آدرس IP محدود کنیم.
🔹️ چگونه کاربران را بر اساس هویت (Identity) آنها محدود کنیم.
🔹️ چگونه Rate Limiting را روی Reverse Proxy اعمال کنیم.
بنابراین، بیایید شیرجه بزنیم! 👇
✨ Rate Limiting داخلی در .NET 7
از نسخه NET 7. به بعد، ما به Middleware محدودسازی نرخ داخلی در فضای نام Microsoft.AspNetCore.RateLimiting دسترسی داریم. API آن ساده است و شما میتوانید با چند خط کد، یک سیاست محدودسازی نرخ (Rate Limit Policy) ایجاد کنید.
ما میتوانیم از یکی از چهار الگوریتم محدودسازی نرخ استفاده کنیم:
• Fixed window (پنجره ثابت)
• Sliding window (پنجره کشویی)
• Token bucket (سطل توکن)
• Concurrency (همروندی)
💻 تعریف سیاست Token Bucket
در اینجا نحوه تعریف یک سیاست محدودسازی نرخ با فراخوانی متد AddTokenBucketLimiter آمده است:
builder.Services.AddRateLimiter(rateLimiterOptions =>
{
rateLimiterOptions.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
rateLimiterOptions.AddTokenBucketLimiter("token", options =>
{
options.TokenLimit = 1000;
options.ReplenishmentPeriod = TimeSpan.FromHours(1);
options.TokensPerPeriod = 700;
options.AutoReplenishment = true;
});
});
حالا میتوانید سیاست محدودسازی نرخ با نام token را در اِندپوینت یا کنترلر خود ارجاع دهید.
شما همچنین باید RateLimitingMiddleware را به خط لوله درخواست (Request Pipeline) اضافه کنید:
app.UseRateLimiter();
شما میتوانید جزئیات بیشتری درباره Rate Limiting در NET 7. کسب کنید.