前言
FireflySoft.RateLimit是基於.NET Core和.NET Standard構建,支持多種速率限制演算法和策略,包括固定視窗、滑動視窗、漏桶、令牌桶等。透過簡單的配置和整合,開發者可以快速地將其套用到現有的Web API、微服務或中介軟體中,實作對請求的精確控制。
同時,該庫還支持分布式系統中的速率限制,透過Redis等分布式緩存系統實作數據的共享和同步,確保在不同節點之間實作一致的速率限制效果。
除了強大的功能外,FireflySoft.RateLimit還註重易用性和效能最佳化。提供了簡潔明了的API和豐富的範例程式碼,使得開發者能夠快速地掌握其使用方法。同時,我們還對演算法進行了最佳化,減少了不必要的計算開銷,以確保在高並行場景下仍然能夠保持高效的效能表現。
總之,FireflySoft.RateLimit 是一個不錯的限流類別庫,其內核簡單輕巧,能夠靈活應對各種需求的限流場景。希望透過它能夠幫助更多的開發者保護系統和API免受惡意請求和過載請求的侵害,同時也期待與大家一起探索更多可能性和創新點。
功能
多種限流演算法:內建固定視窗、滑動視窗、漏桶、令牌桶四種演算法,還可自訂擴充套件。
多種計數儲存:目前支持記憶體、Redis(含集群)兩種儲存方式。
分布式友好:透過Redis儲存支持分布式程式統一計數。
限流目標靈活:可以從請求中提取各種數據用於設定限流目標。
支持限流懲罰:可以在客戶端觸發限流後釘選一段時間不允許其存取。
時間視窗增強:支持到毫秒級別;支持從秒、分鐘、小時、日期等時間周期的起始點開始。
即時限流跟蹤:當前計數周期內已處理的請求數、剩余允許請求數,以及計數周期重設的時間。
動態更改規則:支持程式執行時動態更改限流規則。
自訂錯誤:可以自訂觸發限流後的錯誤碼和錯誤訊息。
普適性:原則上可以滿足任何需要限流的場景。
publicvoidConfigureServices(IServiceCollection services)
{
...
services.AddRateLimit(new InProcessFixedWindowAlgorithm(
new[] {
new FixedWindowRule()
{
ExtractTarget = context =>
{
// 提取限流目標
// 這裏是直接從請求中提取Path作為限流目標,還可以多種組合,甚至去遠端查詢一些數據
return (context as HttpContext).Request.Path.Value;
},
CheckRuleMatching = context =>
{
// 檢查當前請求是否要做限流
// 比如有些Url是不做限流的、有些使用者是不做限流的
returntrue;
},
Name="default limit rule",
LimitNumber=30, // 限流時間視窗內的最大允許請求數量
StatWindow=TimeSpan.FromSeconds(1) // 限流計數的時間視窗
}
})
);
...
}
publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseRateLimit();
...
}
ASP.NET 套用
1、安裝 Nuget 包, 使用包管理器控制台:
Install-Package FireflySoft.RateLimit.AspNet
其它型別套用
1、安裝 Nuget 包, 使用包管理器控制台
Install-Package FireflySoft.RateLimit.Core
或者 .NET CLI
dotnet add package FireflySoft.RateLimit.Core
2、使用限流演算法, 使用 IAlgorithm 過濾每個請求, 處理 Check 方法的返回值。
// 定義限流規則
var fixedWindowRules = new FixedWindowRule[]
{
new FixedWindowRule()
{
Id = "3",
StatWindow=TimeSpan.FromSeconds(1),
LimitNumber=30,
ExtractTarget = (request) =>
{
return (request as SimulationRequest).RequestResource;
},
CheckRuleMatching = (request) =>
{
returntrue;
},
}
};
// 使用限流演算法
IAlgorithm algorithm = new InProcessFixedWindowAlgorithm(fixedWindowRules);
// 過濾請求
var result = algorithm.Check(new SimulationRequest()
{
RequestId = Guid.NewGuid().ToString(),
RequestResource = "home",
Parameters = new Dictionary<string, string>() {
{ "from","sample" },
}
});
SimulationRequest是一個自訂請求,你可以把它修改為任何適合自己的請求型別。
地址
https://github.com/bosima/FireflySoft.RateLimit
總結
FireflySoft.RateLimit 是一個功能強大且靈活的速率限制庫,適用於多種套用場景。
透過提供多種演算法和策略、支持分布式系統、易於配置和擴充套件等特點,使得使用者能夠輕松地實作API請求的速率控制,保護系統免受惡意請求或過載請求的侵害。
同時,該庫還提供了簡潔明了的API和範例程式碼,使得使用者能夠快速上手並整合到現有系統中。
轉自:小碼編匠
連結:www.cnblogs.com/1312mn/p/18264444
- EOF -
推薦閱讀 點選標題可跳轉
看完本文有收獲?請轉發分享給更多人
推薦關註「DotNet」,提升.Net技能
點贊和在看就是最大的支持❤️