并发请求限流简单方案

并发请求限流简单方案,第1张

并发请求限流简单方案

一、问题场景

商城应用,活动期间力度大,引流超过预期,系统并发能力支撑不够,导致高峰期服务不可用(实际活动最高并发数峰值达到并发评估和性能压测的2倍)。在系统紧急扩容后,还需做基本的限流 *** 作,避免突增流量时造成系统瘫痪。 应对秒杀,大促等高性能压力的场景时,为了保证系统的平稳运行,必须针对超过预期的流量,通过预先设定的限流规则选择性的对某些请求进行限流。

二、限流理解

分布式三大利器

随着业务的发展壮大,对后端服务的压力也会越来越大,为了打造高效稳定的系统, 产生了分布式,微服务等等系统设计,因为这个原因,设计复杂度也随之增加,基于此 诞生了高并发系统三大利器限流,缓存,降级/熔断

限流: 从系统的流量入口考虑,从进入的流量上进行限制,达到保护系统的作用;

缓存: 将数据库中的数据缓存起来,提升系统访问速度和并发度,保护数据库资源。

降级和熔断比较类似,都是属于过载保护机制,但是实现上有着如下区别

降级: 从系统内部的平级服务或者业务的维度考虑,流量大了,可以暂停或延迟一些非重要服务,如日志收集等等,保护其他正常使用;

熔断: 当某一服务出现了过载现象,为防止整个系统故障,直接关闭该服务或者保证部分请求成功,另一部分返回失败。比如10s内连续请求失败次数达到20次, 触发熔断机制,过滤60%请求。

三、限流方案

由于系统前期限流需求较为简单,只需要为了保证系统的平稳运行,针对超过预期的流量,进行限流即可。限流规则简单。

初步应用nginx限流和网关限流两种方案实现,并做以调试。

方案一 nginx限流

Nginx 提供两种限流方式,一是控制速率,二是控制并发连接数。

1、limit_conn_zone

ngx_http_limit_conn_module 提供了限制连接数的能力,利用 limit_conn_zone 和 limit_conn 两个指令即可。

2、limit_req_zone

ngx_http_limit_req_module 模块提供限制请求处理速率能力,使用了漏桶算法(leaky bucket)。

3、ngx_http_upstream_module

前两种只能对客户端(即单一ip限流)

根据实际情况应用upstream_module限流

 

压测限流生效

 

 

方案二 网关gateway限流

geteway可以基于GatewayFilter自身的RequestRateLimiter实现限流,可以基础Sentinel等中间件实现限流,这里是基于自身GatewayFilter实现。

RequestRateLimiter限流是基于redis的,需要继承配置redis

 

压测限流效果

 

 

 

参考链接

分布式高并发系统限流原理与实践 https://zhuanlan.zhihu.com/p/340815033

Nginx-限流的三种方法 https://blog.csdn.net/qq_47148037/article/details/107265814

Nginx 限流总结 https://www.cnblogs.com/jelly12345/p/14469280.html

SpringCloud gateway 限流 RequestRateLimiter https://blog.csdn.net/xgw1010/article/details/109403892

Spring Cloud Gateway 网关限流 https://www.cnblogs.com/huan1993/p/15416072.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存