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

net,api · 浏览次数 : 17

小编点评

前言 FireflySoft.RateLimit 是一个基于 .NET Core 和 .NET Standard 构建的高度可定制的速率限制库,旨在帮助开发者在 Web API、微服务和中间件中实现对请求的精确控制。该库支持多种速率限制算法和策略,如固定窗口、滑动窗口、漏桶和令牌桶等,并且可以通过 Redis 等分布式缓存系统实现数据的共享和同步,确保在不同节点之间实现一致的速率限制效果。 除了强大的功能外,FireflySoft.RateLimit 还注重易用性和性能优化。它提供了简洁明了的 API 和丰富的示例代码,使得开发者能够快速地掌握其使用方法。同时,我们还对算法进行了优化,减少了不必要的计算开销,以确保在高并发场景下仍然能够保持高效的性能表现。 总之,FireflySoft.RateLimit 是一个功能丰富且易于使用的限流类库,适用于各种需要限流的场景。希望它能帮助更多的开发者保护系统和 API 免受恶意请求和过载请求的侵害,同时也期待与大家一起探索更多可能性和创新点。 功能 - 支持多种限流算法:内置固定窗口、滑动窗口、漏桶、令牌桶四种算法,还可自定义扩展。 - 支持多种计数存储:目前支持内存、Redis(含集群)两种存储方式。 - 分布式友好:通过 Redis 存储支持分布式程序统一计数。 - 限流目标灵活:可以从请求中提取各种数据用于设置限流目标。 - 支持限流惩罚:可以在客户端触发限流后锁定一段时间不允许其访问。 - 时间窗口增强:支持到毫秒级别;支持从秒、分钟、小时、日期等时间周期的起始点开始。 - 实时限流跟踪:当前计数周期内已处理的请求数、剩余允许请求数,以及计数周期重置的时间。 - 动态更改规则:支持程序运行时动态更改限流规则。 - 自定义错误:可以自定义触发限流后的错误码和错误消息。 - 普适性:原则上可以满足任何需要限流的场景。 项目说明 - FireflySoft.RateLmit.Core:算法、规则等限流核心控制程序。 - FireflySoft.RateLimit.AspNet:ASP.NET 限流处理器,支持 .NET 4.6.1 及以上版本。 - FireflySoft.RateLimit.AspNetCore:ASP.NET Core 限流中间件,支持 .NET Core 2.0 及后续版本。 - FireflySoft.RateLimit.Core.UnitTest:FireflySoft.RateLimit.Core 的单元测试。 - FireflySoft.RateLimit.Core.BenchmarkTest:FireflySoft.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 应用:安装 Nuget 包,使用包管理器控制台或 .NET CLI 或项目文件添加中间件。 - 其它类型应用:安装 Nuget 包,使用限流算法过滤每个请求,处理 Check 方法的返回值。 总结 FireflySoft.RateLimit 是一个功能强大且灵活的速率限制库,适用于多种应用场景。通过提供多种算法和策略、支持分布式系统、易于配置和扩展等特点,使得用户能够轻松地实现 API 请求的速率控制,保护系统免受恶意请求或过载请求的侵害。同时,该库还提供了简洁明了的 API 和示例代码,使得用户能够快速上手并集成到现有系统中。

正文

前言

    FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口、滑动窗口、漏桶、令牌桶等。通过简单的配置和集成,开发者可以快速地将其应用到现有的Web API、微服务或中间件中,实现对请求的精确控制。

    同时,该库还支持分布式系统中的速率限制,通过Redis等分布式缓存系统实现数据的共享和同步,确保在不同节点之间实现一致的速率限制效果。

    除了强大的功能外,FireflySoft.RateLimit还注重易用性和性能优化。提供了简洁明了的API和丰富的示例代码,使得开发者能够快速地掌握其使用方法。同时,我们还对算法进行了优化,减少了不必要的计算开销,以确保在高并发场景下仍然能够保持高效的性能表现。

    总之,FireflySoft.RateLimit 是一个不错的限流类库,其内核简单轻巧,能够灵活应对各种需求的限流场景。希望通过它能够帮助更多的开发者保护系统和API免受恶意请求和过载请求的侵害,同时也期待与大家一起探索更多可能性和创新点。

功能

  • 多种限流算法:内置固定窗口、滑动窗口、漏桶、令牌桶四种算法,还可自定义扩展。

  • 多种计数存储:目前支持内存、Redis(含集群)两种存储方式。

  • 分布式友好:通过Redis存储支持分布式程序统一计数。

  • 限流目标灵活:可以从请求中提取各种数据用于设置限流目标。

  • 支持限流惩罚:可以在客户端触发限流后锁定一段时间不允许其访问。

  • 时间窗口增强:支持到毫秒级别;支持从秒、分钟、小时、日期等时间周期的起始点开始。

  • 实时限流跟踪:当前计数周期内已处理的请求数、剩余允许请求数,以及计数周期重置的时间。

  • 动态更改规则:支持程序运行时动态更改限流规则。

  • 自定义错误:可以自定义触发限流后的错误码和错误消息。

  • 普适性:原则上可以满足任何需要限流的场景。

项目说明

项目说明
FireflySoft.RateLmit.Core 算法、规则等限流核心控制程序。
FireflySoft.RateLimit.AspNet ASP.NET 限流处理器,支持 .NET 4.6.1 及以上版本。
FireflySoft.RateLimit.AspNetCore ASP.NET Core 限流中间件,支持 .NET Core 2.0 及后续版本。
FireflySoft.RateLimit.Core.UnitTest FireflySoft.RateLimit.Core 的单元测试。
FireflySoft.RateLimit.Core.BenchmarkTest FireflySoft.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和示例代码,使得用户能够快速上手并集成到现有系统中。

 

与.NET 高效灵活的API速率限制解决方案相似的内容:

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

前言 FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口、滑动窗口、漏桶、令牌桶等。通过简单的配置和集成,开发者可以快速地将其应用到现有的Web API、微服务或中间件中,实现对请求的精确控制。 同时,该库还支

【.NET 深呼吸】全代码编写WPF程序

学习 Code 总有这样一个过程:入门时候比较依赖设计器、标记语言等辅助工具;等到玩熟练了就会发现纯代码写 UI 其实更高效。而且,纯代码编写也是最灵活的。Windows Forms 项目是肯定可以全代码编写的,哪怕你使用了设计器,它最后也是生成代码文件;而 WPF 就值得探索一下了。咱们知道,WP

.NET开源免费功能最全的商城项目

前言 今天给大家推荐一个功能丰富、免费、灵活且可定制的开源电子商务解决方案:nopCommerce。大家假如有商城需求可以直接使用该项目进行二次开发,省时省力。 项目介绍 nopCommerce在.NET 7上运行,并使用MS SQL 2012(或更高版本)后端数据库。 nopCommerce是跨平

.NET使用CsvHelper快速读取和写入CSV文件

前言 在日常开发中使用CSV文件进行数据导入和导出、数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入。 CsvHelper类库介绍 CsvHelper是一个.NET开源、快速、灵活、高度可配置、易于使用的用于读取和写入CSV文件的类

jdk17下netty导致堆内存疯涨原因排查

# 背景: ### 介绍 天网风控**灵玑**系统是基于内存计算实现的高吞吐低延迟在线计算服务,提供滑动或滚动窗口内的count、distinctCout、max、min、avg、sum、std及区间分布类的在线统计计算服务。客户端和服务端底层通过netty直接进行tcp通信,且服务端也是基于net

Visual Studio编程效率提升技巧集(提高.NET编程效率)

前言 本文大姚将为你介绍一些Visual Studio的使用技巧和建议,旨在帮助.NET开发者更加高效地利用Visual Studio进行编程工作。无论你是.NET初学者还是经验丰富的.NET开发者,这些技巧都将有助于提升你的工作效率,让你能够更快地编写出高质量的代码。让我们一起探索这些技巧,让编程

.NET集成DeveloperSharp实现"高效分页"&"无主键分页"

DeveloperSharp系列近期又被制造业ERP、民航飞行App、建筑BIM、电力掌上营业厅、等多家大型采用,站在巨人的肩膀上你能走的更远。 支持.Net Core2.0及以上,支持.Net Framework4.0及以上 数据分页,几乎是任何应用系统的必备功能。但当数据量较大时,分页操作的效率

三个编程思想:面向对象编程、面向接口编程、面向过程编程【概念解析系列_1】【C# 基础】

对于 .Net 中的编程思想还是十分重要的,也是编码出高效的程序的基础!

瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台

瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理、项目管理、 团队协作平台。瑞亚 拥有现代化的页面风格,高效、简便,同时适合个人和团队使用。 瑞亚对个人免费,提供了无限制的任务,列表,和空间。 功能预览 瑞亚时间管理大师是以任务管理为核心,还包括了看板,文档,思维导图,白板,和 OKR 目

C#.Net筑基-基础知识

C# (读作C Sharp)是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言,最初于 2000 年发布,并随后成为 .NET 框架的一部分。所以学习C#语言的同时,也是需要同步学习.NET框架的,不过要要注意C#与.NET的对应版本。