欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET 高效靈活的API速率限制解決方案

freeflydom
2024年6月26日 10:33 本文熱度 900

前言

    FireflySoft.RateLimit是基于.NET Core和.NET Standard構建,支持多種速率限制算法和策略,包括固定窗口、滑動窗口、漏桶、令牌桶等。通過簡單的配置和集成,開發者可以快速地將其應用到現有的Web API、微服務或中間件中,實現對請求的精確控制。

    同時,該庫還支持分布式系統中的速率限制,通過Redis等分布式緩存系統實現數據的共享和同步,確保在不同節點之間實現一致的速率限制效果。

    除了強大的功能外,FireflySoft.RateLimit還注重易用性和性能優化。提供了簡潔明了的API和豐富的示例代碼,使得開發者能夠快速地掌握其使用方法。同時,我們還對算法進行了優化,減少了不必要的計算開銷,以確保在高并發場景下仍然能夠保持高效的性能表現。

    總之,FireflySoft.RateLimit 是一個不錯的限流類庫,其內核簡單輕巧,能夠靈活應對各種需求的限流場景。希望通過它能夠幫助更多的開發者保護系統和API免受惡意請求和過載請求的侵害,同時也期待與大家一起探索更多可能性和創新點。

功能

  • 多種限流算法:內置固定窗口、滑動窗口、漏桶、令牌桶四種算法,還可自定義擴展。

  • 多種計數存儲:目前支持內存、Redis(含集群)兩種存儲方式。

  • 分布式友好:通過Redis存儲支持分布式程序統一計數。

  • 限流目標靈活:可以從請求中提取各種數據用于設置限流目標。

  • 支持限流懲罰:可以在客戶端觸發限流后鎖定一段時間不允許其訪問。

  • 時間窗口增強:支持到毫秒級別;支持從秒、分鐘、小時、日期等時間周期的起始點開始。

  • 實時限流跟蹤:當前計數周期內已處理的請求數、剩余允許請求數,以及計數周期重置的時間。

  • 動態更改規則:支持程序運行時動態更改限流規則。

  • 自定義錯誤:可以自定義觸發限流后的錯誤碼和錯誤消息。

  • 普適性:原則上可以滿足任何需要限流的場景。

項目說明

項目說明
FireflySoft.RateLmit.Core算法、規則等限流核心控制程序。
FireflySoft.RateLimit.AspNetASP.NET 限流處理器,支持 .NET 4.6.1 及以上版本。
FireflySoft.RateLimit.AspNetCoreASP.NET Core 限流中間件,支持 .NET Core 2.0 及后續版本。
FireflySoft.RateLimit.Core.UnitTestFireflySoft.RateLimit.Core 的單元測試。
FireflySoft.RateLimit.Core.BenchmarkTestFireflySoft.RateLimit.Core 的基準測試。
Samples/Console使用 FireflySoft.RateLmit.Core 的控制臺示例程序.
Samples/AspNet使用 FireflySoft.RateLimit.AspNet 的普通示例程序。
Samples/AspNetCore使用 FireflySoft.RateLimit.AspNetCore 的普通示例程序。
Samples/RuleAutoUpdate使用 FireflySoft.RateLimit.AspNetCore 的自動更新限流規則的示例程序。

使用說明

ASP.NET Core 應用

    1、安裝 Nuget 包,使用包管理器控制臺:

Install-Package FireflySoft.RateLimit.AspNetCore

       或者使用 .NET CLI:

dotnet add package FireflySoft.RateLimit.AspNetCore

       或者直接添加到項目文件中:

<ItemGroup><PackageReference Include="FireflySoft.RateLimit.AspNetCore" Version="2.*" /></ItemGroup>

2、使用中間件

      在Startup.cs中注冊服務并使用中間件:

public void ConfigureServices(IServiceCollection services)

{

    ...


    services.AddRateLimit(new InProcessFixedWindowAlgorithm(

        new[] {

            new FixedWindowRule()

            {

                ExtractTarget = context =>

                {

                    // 提取限流目標

                    // 這里是直接從請求中提取Path作為限流目標,還可以多種組合,甚至去遠程查詢一些數據

                    return (context as HttpContext).Request.Path.Value;

                },

                CheckRuleMatching = context =>

                {

                    // 檢查當前請求是否要做限流

                    // 比如有些Url是不做限流的、有些用戶是不做限流的

                    return true;

                },

                Name="default limit rule",

                LimitNumber=30, // 限流時間窗口內的最大允許請求數量

                StatWindow=TimeSpan.FromSeconds(1) // 限流計數的時間窗口

            }

        })

    );


    ...

}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

    ...


    app.UseRateLimit();


    ...

}


 

ASP.NET 應用

    1、安裝 Nuget 包,使用包管理器控制臺:

Install-Package FireflySoft.RateLimit.AspNet

    2、注冊消息處理器,打開 Global.asax.cs,使用下面的代碼添加限流處理器:

protected void Application_Start()

{

    ...


    GlobalConfiguration.Configuration.MessageHandlers.Add(

        new RateLimitHandler(

            new Core.InProcessAlgorithm.InProcessFixedWindowAlgorithm(

                new[] {

                    new FixedWindowRule()

                    {

                        ExtractTarget = context =>

                        {

                            return (context as HttpRequestMessage).RequestUri.AbsolutePath;

                        },

                        CheckRuleMatching = context =>

                        {

                            return true;

                        },

                        Name="default limit rule",

                        LimitNumber=30,

                        StatWindow=TimeSpan.FromSeconds(1)

                    }

                })

        ));


    ...

}


其它類型應用

    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) =>

        {

            return true;

        },

    }

};


// 使用限流算法

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和示例代碼,使得用戶能夠快速上手并集成到現有系統中。


轉自https://www.cnblogs.com/1312mn/p/18264444 作者小碼編匠


該文章在 2024/6/26 10:33:37 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved