Ultimate ASP.NET CORE 6.0 Web API --- 读书笔记(26)
26 Rate Limiting And Throttling
本文内容来自书籍: Marinko Spasojevic - Ultimate ASP.NET Core Web API - From Zero To Six-Figure Backend Developer (2nd edition)
速度限制允许我们去保护我们的API不被过多的请求压垮
API会拒绝超出限制的请求,而节流会将超出的请求放入队列等待后续处理,如果经过一定次数的尝试处理之后,还是不能处理,最终会拒绝请求
我们在响应头中添加关于速度限制的信息
在允许访问的前提下,有如下信息
- X-Rate-Limit-Limit,限制的区间
- X-Rate-Limit-Remaining,剩下的请求数
- X-Rate-Limit-Reset,重置限制请求数的日期
如果不允许访问之后,会返回429 Too Many Requests
状态码
26.1 Implementing Rate Limiting
使用包AspNetCoreRateLimit
实现速度限制,安装在主项目
然后老规矩,注册服务,而且,这个服务,需要使用内存来存储计数和规则,所以也需要添加MemoryCache
服务
配置包含了限制的规则rule
,请求被允许访问所有端点在5分钟的区间里面,然后注册规则、存储、配置、处理策略,这些注册的服务目的是为了存储速度限制的计数器和策略以及添加配置
builder.Services.AddMemoryCache();
public static void ConfigureRateLimitingOptions(this IServiceCollection services)
{
var rateLimitRules = new List<RateLimitRule>
{
new()
{
Endpoint = "*",
Limit = 3,
Period = "5m"
}
};
services.Configure<IpRateLimitOptions>(opt => opt.GeneralRules = rateLimitRules);
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
}
builder.Services.ConfigureRateLimitingOptions();
builder.Services.AddHttpContextAccessor();
app.UseIpRateLimiting();
除了上面的配置之外,还有很多的配置参数,可以在这个包的Github上查看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?