LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

.NET 高效灵活的API速率限制解决方案

freeflydom
2024年6月26日 10:33 本文热度 666

前言

    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-2024 ClickSun All Rights Reserved