关于两种限流模式

流量预警和限流方案中,比较常用的有两种。第一种滑窗模式,通过统计多个单元时间的访问次数来进行控制,当单位时间的访问次数达到的某个峰值时进行限流。第二种为响应模式,通过控制当前活跃请求数,来进行流量控制。下面来简单分析下两种的优缺点。

1、滑窗模式

模式分析:

在每次有访问进来时,我们判断前N个单位时间里总访问量是否超过了设置的阈值,若超过则不允许执行。

这种模式的实现的方式更加契合流控的本质意义。理解较为简单。但由于访问量的预先不可预见性,会发生单位时间的前半段有大量的请求涌入,而后半段则拒绝所有请求的情况发生。(一般,需要会将单位时间切的足够的细来解决这个问题)其次,我们很难确定这个阈值设置在多少比较合适,只能通过经验或者模拟(如压测)来进行估计,不过即使是压测也很难估计的准确,线上每台机器的硬件参数的不同,或者同一台机子在不同的时间点其可以接受的阈值也不尽相同(系统中),每个时间点导致能够承受的最大阈值也不尽相同,我们无法考虑的周全。

所以滑窗模式往往用来对某一资源的保护上(或者说是承诺比较合适:我对某一接口的提供者承诺过,最高调用量不超过XX),如对db的保护,对某一服务的调用的控制上。因为对于我们应用来说,db或某一接口就是一共单一的整体。

代码实现思路:

每一个窗(单位时间)就是一个独立的计数器(原子计数器),用以数组保存。将当前时间以某种方式(比如取模)映射到数组的一项中。每次访问先对当前窗内计数器+1,再计算前N个单元格的访问量综合,超过阈值则限流。

这里有个问题,时间永远是递增的,单纯的取模,会导致数组过长,使用内存过多,我们可以用环形队列来解决这个问题。

2、响应模式

模式分析:

每次操作执行时,我们通过判断当前正在执行的访问数是否超过某个阈值在决定是否限流。

该模式看着思路比较的另类,但却有其独到之处。实际上我们限流的根本是为了保护资源,防止系统接受的请求过多,应接不暇,拖慢系统中其他接口的服务,造成雪崩。也就是说我们真正需要关心的是那些运行中的请求,而那些已经完成的请求已是过去时,不再是需要关心的了。

我们来看看其阈值的计算方式,对于一个请求来说,响应时间rt/qps是一个比较容易获取的参数,那么我们这样计算:qps/1000*rt。

此外,一个应用往往是个复杂的系统,提供的服务或者暴露的请求、资源不止一个。内部GC、定时任务的执行、其他服务访问的骤增,外部依赖方、db的抖动,抑或是代码中不经意间的一个bug。都可能导致相应时间的变化,导致系统同时可以执行请求的变化。而这种模式,则能恰如其分的自动做出调整,当系统不适时,rt增加时,会自动的对qps做出适应。

代码实现思路:

当访问开始时,我们对当前计数器(原子计数器)+1,当完成时,-1。该计数器即为当前正在执行的请求数。只需判断这个计数器是否超过阈值即可。

时间: 2024-08-30 21:48:44

关于两种限流模式的相关文章

深入php-fpm的两种进程管理模式详解_php实例

php-fpm的两种进程管理模式php-fpm的进程数也是可以根据设置分为动态和静态的.一种是直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限.这两种不同的执行方式,可以根据服务器的实际需求来进行调整.这里先说一下涉及到这个的几个参数吧,他们分别是pm.pm.max_children.pm.start_servers.pm.min_sp

近来最火的两种互联网创新模式

问渠哪得清如许,唯有源头活水来.互联网行业之所以如此波澜壮阔,惹无数英雄竞折腰,其最重要的原因之一就是源头活水不断,创新不断. 由于长期关注互联网,自然免不了经常被人问到诸如"最近什么模式最火啊"."你最看好什么模式"."推荐推荐创业项目"之类的问题. 最近一段时间,我的回答是:近来最火的互联网模式有两个,一个是以Foursquare为代表的基于地理位置信息的Checkin模式,一个是以Groupon为代表的http://www.aliyun.c

Tcpcopy常用的几种引流模式 3

Tcpcopy 给用户提供了很多命令参数来修改引流的模式和设置,详细可以查阅手册.在这里把几种常见的引流方式做个归纳小结,以Tcpcopy传统架构使用命令举例. 分布式引流 用法:Tcpcopy可以通过-x参数实现将多台服务器的请求复制到同一台测试服务器上面去,-x参数常用于分布式引流的场合,可以从多节点进行引流复制. #./tcpcopy -x 2080- xxx.xx.x.xxx:9999 #./tcpcopy -x 2080- xxx.xx.x.xxx:9999 -f 1 #./tcpco

酷6两种独特商业模式

"我自认为是个非常幸运的人,生命中有机会经历多种人生和职业角色:一个来自于偏远的东北农村而幸福地生活在京城的人:一个学数学(南开)而先后从事人事工作(MOTO)和总编辑(SOHU)工作的人:一个就业于最现代的互联网行业却痴迷于国学和历史的人.我的志向是把中国传统国学和现代西方企业管理有所结合,中学为体,西学为用,框架为相,琢磨出一套中国式管理之路" --李善友 李善友,酷6网董事长兼CEO,曾担任搜狐高级副总裁兼总编辑,再之前从事多年人力资源管理工作.2006年4月离开搜狐,并创立酷6

阅读天龙八部的代码有感----两种逻辑处理模式的比较

1: 天龙八部的逻辑处理模块:   逻辑处理模块:   void run   { for(;;){        select();  //epoll wait();        process_inputs();        process_commands();        process_outputs();        process_execeptions();       }   }   天龙八部的SocketOutputStream 和 SocketInputStream

两种虚拟经营模式未来:恒源祥VS美特斯邦威

2008年8月28日,美特斯邦威服饰有限公司正式挂牌上市,董事长周成建表示,所募资金的85%将用于渠道建设.不久后的2008年11月30日,在北京奥运会赞助商权利即将被收回之际,恒源祥宣布成为中国奥委会2009-2012年首家合作伙伴,继续和奥运五环结缘.美特斯邦威和恒源祥这两家以虚拟经营模式著称的企业,正走向两条不同的发展道路,而它们的不同选择或许将代表虚拟经营模式的两种未来. 打江山易,坐江山难 恒源祥和美特斯邦威(以下简称"美邦")的起家模式大同小异.它们都是依靠品牌整合其他社会

浅谈个人站长的两种发展盈利模式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天的文章主要面向新手站长和屡次失败的站长,我想讲的不是别的,而是一个个人站长建站的思路,个人站长的成功很多时候取决于坚持和运气,但是当你失败或成功之后反过来看你的历程,你会发现,其实有发展过程中的问题可以避免,或者说很多时候你可以做的更快更好,盈利更多,而这一切可以归因于一个问题,那就是一个网站的成功,很大的程度上要看你的网站的发展方向,一

流量调整和限流技术

在早期的计算机领域,限流技术(time limiting)被用作控制网络接口收发通信数据的速率. 可以用来优化性能,减少延迟和提高带宽等. 现在在互联网领域,也借鉴了这个概念, 用来为服务控制请求的速率, 如果双十一的限流, 12306的抢票等. 即使在细粒度的软件架构中,也有类似的概念. 两种常用算法 令牌桶(Token Bucket)和漏桶(leaky bucket)是 最常用的两种限流的算法. 漏桶算法 它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量.漏桶算法提供了一种机制,

解析Ftp协议的两种工作模式

Ftp协议的两种工作模式:主动模式active和被动模式passive FTP 是一种数据传输协议 (File Transfer Protocol),它的连接模式有两种: 主动模式( active )和被动模式( passive ). 以下说明FTP的连接是怎样建立的: 在 active 模式下 (一般预设的模式): FTP client 开启一个随机选择的TCP port 呼叫 FTP server 的 port 21请求建立连接.当完成 Three-Way Handshake 之后,连接就成