當前位置: 妍妍網 > 碼農

並行請求太多,伺服器崩潰了?看看 ASP.NET Core Web API 如何對請求進行限流

2024-02-04碼農

在當今的網路套用中,隨著使用者數量的增長和業務規模的擴大,如何有效地管理並限制來自使用者的請求成為了重要的問題。過度的請求可能對伺服器造成過大的壓力,影響服務的穩定性和效能。因此,請求限制成為了保護伺服器資源,維護服務穩定的重要手段。在.NET Core框架中,AspNetCoreRateLimit是一個非常有用的工具,能夠幫助開發者實作高效的請求限制。

一、AspNetCoreRateLimit簡介

AspNetCoreRateLimit是一個開源的.NET Core庫,它提供了一種簡單的方法來限制對ASP.NET Core應用程式的請求速率。該庫利用了分布式令牌桶演算法(Distributed Token Bucket),可以根據預定的速率限制規則對請求進行限制。

二、使用AspNetCoreRateLimit

要在ASP.NET Core應用程式中使用AspNetCoreRateLimit,首先需要安裝NuGet包。可以透過執行以下命令來安裝:

dotnet add package AspNetCore.RateLimiting

安裝完成後,你需要在Startup.cs檔中的 ConfigureServices 方法中配置請求限制服務:

publicvoidConfigureServices(IServiceCollection services)
{
services.AddRateLimiting(options =>
{
options.Store = new InMemoryStore(); // 儲存令牌桶數據,可選持久化儲存
options.Policy = new RateLimitPolicy(TimeSpan.FromMinutes(1), 10); // 1分鐘內最多10個請求
});
services.AddControllers();
}

在上面的程式碼中,我們配置了一個基於記憶體儲存的令牌桶,並設定了每分鐘最多10個請求的限制。你可以根據實際需求調整這些參數。

接下來,你需要在 Configure 方法中添加請求限制中介軟體:

publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseMiddleware<RateLimitingMiddleware>(); // 添加請求限制中介軟體
}

透過以上步驟,你就可以在你的ASP.NET Core應用程式中使用AspNetCoreRateLimit進行請求限制了。當請求超過預設的速率限制時,中介軟體將返回429 Too Many Requests狀態碼。