限流定义、算法、实施方案

限流定义

  1、  时间 , 基于某段时间或某个时间点,即:时间窗口

   2、资源: 对可用资源进行限制: QPS/连接数/传输速率/黑白名单等

分布式环境下,主流限流方案:
网关层限流:流量入口Nginx/Gateway/Zuul

中间件限流:如利用redis过期特性,每秒10个请求,结合lua进行脚本编程

限流组件:sentinel

限流算法

1、令牌桶

   把令牌放到桶中,拿到令牌的请求被执行,否则丢弃。另,有恒定的速率把令牌放入桶中

2、漏桶

把请求放到桶中,以恒定的速率漏出请求。

优点:不会有突发流量,对后台服务输出的访问速率恒定

3、滑动窗口

计数器方案。一定时间内的访问总量。时间窗口越多,限流效果越平滑。

具体的实现限流的手段

---转载

1)Tomcat 使用 maxThreads来实现限流。

2)Nginx的limit_req_zone和 burst来实现速率限流。

3)Nginx的limit_conn_zone和 limit_conn两个指令控制并发连接的总数。

4)时间窗口算法借助 Redis的有序集合可以实现。

        限流之redis 有序集合(zset)实现滑动窗口_redistemplate zadd-优快云博客

5)漏桶算法可以使用Redis-Cell来实现。

6)令牌算法可以解决Google的guava包来实现。

需要注意的是借助Redis实现的限流方案可用于分布式系统,而guava实现的限流只能应用于单机环境。如果你觉得服务器端限流麻烦,可以在不改任何代码的情况下直接使用容器限流(Nginx或Tomcat),但前提是能满足项目中的业务需求。

Tomcat限流

Tomcat 8.5 版本的最大线程数在 conf/server.xml 配置中,maxThreads 就是 Tomcat 的最大线程数,当请求的并发大于此值(maxThreads)时,请求就会排队执行,这样就完成了限流的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值