限流的几种方式

摘要:
首先,描述什么是电流限制和电流限制,这可以被认为是一种服务降级。电流限制是限制系统的输入和输出流量,以达到保护系统的目的。很明显,滑动窗口的网格划分越多,滑动窗口滚动越平滑,电流限制的统计也就越准确。它可以有效地平滑流量,因为令牌桶中的令牌以恒定的速度放入相对滑动的窗口中,这节省了更多的内存。它适用于电商抢购或微博热点事件,因为它可以在限制流量的同时应对某些突发流量。实现限制队列大小

先来描述一下什么是限流

  限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。

一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量

  1. 微博热搜
  2. 恶意刷单
  3. 恶意爬虫
  4. 促销活动
  5. 防止DOS攻击

首先是计算器方式实现

计数器又分固定窗口和滑动窗口

固定窗口计数器:

  就是一个计算器,就是在一个时钟周期(该周期也是可以设置的)内,设定一个访问阈值(就是在刚刚设置的时钟周期内的并发量)。如果并发量超过访问阈值,则开始限流

  存在的问题
  限流不均匀,如下所示我们规定10S内至多10个访问量,但2S内实际上有20个访问量。

  出现流量尖峰。

  限流的几种方式第1张

滑动窗口计数器:

  

固定窗口计数器算法由于其存在的临界问题(尖峰问题),统计的精度过低,可能在时间窗口的重置节点处接收大量流量,为解决这个问题,我们引入了滑动窗口算法。

如下图,我们规定访问阈值10,时钟周期是5秒,5秒内超过10次访问量开始限流。该思想就是在任何一个5S内都只有10次访问量。

限流的几种方式第2张

很明显,当滑动窗口的格子划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确。

  缺点:

  1. 不能解决请求分布不均的问题,即无法平滑流量
  2. 实现更复杂,需要维护时间窗口,占用内存更多,计算时间复杂度也相应变大。

令牌算法:

  按照固定的速率往漏斗里添加水,(核心思想是所有请求需要再令牌桶获取到令牌才可以处理, 同时有一个服务匀速的往令牌桶装令牌。可以满足一定的突发请求处理,如果超过令牌桶的请求,也会被拒绝)

  过程:

  1. 一直放令牌,如果令牌桶达到上限则丢弃令牌,假设每秒放10个
  2. 可以应对一定程度的流量激增,如此时令牌桶有100个令牌,突然发生200次调用,则此时最开始的100次请求可以正常调用,后续的请求才会以10个/s的速率来调用

  优点:

  1.   解决了固定窗口流量尖峰的问题,确保在任意时刻,过去窗口时间内的请求不会超出阈值。
  2.   可以有效平滑流量,因为令牌桶的令牌是匀速放入的
  3.   相对滑动窗口更节省内存
  4.   适合电商抢购或者微博出现热点事件这种场景,因为在限流的同时可以应对一定的突发流量。如果采用漏桶那样的均匀速度处理请求的算法,在发生热点时间的时候,会造成大量的用户无法访问,         对用户体验的损害比较大。

漏桶算法:

  就像一个漏斗,上面口大,下面口小,上面可以一直加很多水的水,但是下面小口的口径是固定的,只会有固定单位的水通过。而且上面水量过大,漏斗放不下  会溢出丢失

  将水和访问量换一下,就明白了  (核心思想就是请求收到后,会先进入漏斗,然后再按照限定速度请求服务,及可以达到限流的目的,也可以保证后台收到的请求都是平稳的。 但是也有一个缺点,就是突然流量的时候,会导致处理时间太长。当然流量更大的时候会被拒绝,这个是正常的)。

    优点:实现相对简单,可以限制服务请求速率,并且稳定在一个常速。

    缺点:对于特发流量处理效率过低,在没有到达服务器负载阈值,也只能串行处理请求。

    实现;限制队列的大小



免责声明:文章转载自《限流的几种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#中的String类2C文件的格式化工具(astyle)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网络流(二)最大流的增广路算法

传送门:网络流(一)基础知识篇网络流(二)最大流的增广路算法网络流(三)最大流最小割定理网络流(四)dinic算法网络流(五)有上下限的最大流网络流(六)最小费用最大流问题转载:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出...

【转载】通过百度站长平台查看网站搜索流量及关键字

无论是个人站还是企业站,都希望网站内容丰富后,网上用户可以通过搜索引擎搜索到网站的内容信息,其实如果站长已经入住了百度站长平台,则我们可以通过百度站长平台的数据监控功能中的查看流量和关键词的菜单来查看具体多少用户通过百度搜索查看到自己的网站,通过百度搜索进入自己网站的流量是多少以及用户通过啥搜索关键字发现自己的网站的。 百度站长平台官方页面:点击跳转官方页...

QPS第二级削峰—流量网关+Nginx+lua+Redis+模板引擎

  LVS+Nginx动静分离 上文聊到,对用户入口流量的第一级控制,其实就是DNS智能解析,搭配一个负载均衡器LVS或Nginx,配合Keepalived做到入口高可用,代理或转发请求到Nginx节点,做负载均衡,并从Nginx节点上获取  html资源。 但此时需要思考一个问题? 在html上请求到的都是静态资源,即页面上不变的资源,而动态需要变化的...

OpenCV-Python学习笔记4:图像阀值

参考:Opencv官方教程 1、简单阀值 cv2.threshold , cv2.adaptiveThreshold当像素值高于阀值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是cv2.threshold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阀值...

(四)AppScan用外部设备(ios,安卓)录制app脚本进行安全测试

一、打开AppScan,选择外部设备/客户机,点击下 二、记录代理设置,可以手动输入需要的端口号,也可以自动选择。 手机配置代理: 1.连接wifi 2.找到该wifi--高级设置--配置代理: 三、SSL证书,点击下一步 四、安装好证书以后,点击登陆管理 在手机上打开app,打开登录界面后,点击记录按钮 可以看到设备已连接,执行完登录按钮后,...

【SpringCloud】SpringCloud Alibaba Sentinel实现熔断与限流

SpringCloud Alibaba Sentinel实现熔断与限流 限流与降级 限流 blockHandler 降级 fallback 降级需要运行时出现异常才会触发,而限流一旦触发,你连运行的机会都没有,当然就不会降级。 也就是说,两者如果同时触发,那么一定是限流触发(降级连机会都没有)。 Sentiel 官网 https://github.com/...