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上查看

浙公网安备 33010602011771号