當前位置: 妍妍網 > 碼農

.NET API 高效能的限流利器

2024-06-25碼農

前言

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<stringstring>() {
    "from","sample" },
    }
    });

    SimulationRequest是一個自訂請求,你可以把它修改為任何適合自己的請求型別。

    地址

    https://github.com/bosima/FireflySoft.RateLimit

    總結

    FireflySoft.RateLimit 是一個功能強大且靈活的速率限制庫,適用於多種套用場景。

    透過提供多種演算法和策略、支持分布式系統、易於配置和擴充套件等特點,使得使用者能夠輕松地實作API請求的速率控制,保護系統免受惡意請求或過載請求的侵害。

    同時,該庫還提供了簡潔明了的API和範例程式碼,使得使用者能夠快速上手並整合到現有系統中。

    轉自:小碼編匠

    連結:www.cnblogs.com/1312mn/p/18264444

    - EOF -

    推薦閱讀 點選標題可跳轉

    看完本文有收獲?請轉發分享給更多人

    推薦關註「DotNet」,提升.Net技能

    點贊和在看就是最大的支持❤️