限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量的范围,会引起服务连续崩塌,所以单服务本身最好也是要实现限流的。
在asp.net core项目中,可以引入AspNetCoreRateLimit进行限流处理。
可以通过如下方式引入NuGet包
Client限流
appsetings.json
配置说明:
EnableEndpointRateLimiting为false全部请求总次数超过阈值,即限流,EnableEndpointRateLimiting为true时,各个请求单次超过阈值即限流StackBlockedRequests为false时,如果前5s请求了2个成功,1个失败,那第6s后还可以请求一个成功,如果这StackBlockedRequests为true时,那第6s的请求是不能成功的,也就是带不带拒绝的请求
ClientIdHeader指定可以通过Header键为X-ClientId处理限流黑白名单ClientWhitelist值为dev-id-1,dev-id-2,指Header里X-ClientId只要是其中的值 ,就放行EndpointWhitelist不参与限流的终节点HttpStatusCode限流后返回的状态码
GeneralRules通用限流规则
ClientRateLimitPolicies 配置是专门为了对不同的X-ClientId进行不同的限流配置,这样可以有区别的来分配流程,而不是一概而论,可以说是ClientId的灰名单,有限流的访问
不但可以通过ClientID限流,还可以是客户请示Ip来限流,配置雷同。
IP限流
appsettings.json
想要更快更方便的了解相关知识,可以关注微信公众号