当前位置: 首页 > article >正文

常见限流算法

       常见的限流算法包括 固定时间窗口计数器算法,滑动时间窗口计数器算法,漏桶算法,令牌桶算法。下面我将介绍一下这几种算法的优劣性及适用场景。

       固定时间窗口计数器算法:

       原理:按照时间划分窗口,每个窗口内维护一个计数器,当计数器的值小于限流阈值时,拒绝请求,否则放行。

       优点:空间消耗低,算法复杂度低

       缺点:尖刺问题,就是说在窗口边界的地方,可能会有大流量,压垮系统。例如时间窗口为1s,限流为5qps,那么假设在0.9s时,来了4个请求,放行。在1.1s的时候又来了4个请求,也放行。这会导致实际上在这0.2s内,实际放行了8个请求,这个可能会对系统造成一些破坏。

       适用场景:流量平稳的系统。例如登陆尝试次数限制

      滑动时间窗口计数器算法:

      原理:同上面的固定时间窗口类似,也会有时间窗口的概念,只是它将时间窗口划分成了更小的粒度,窗口是可以移动的。例如当来到了0.1s时,此时的窗口就是0.1s-1.1s。

      优点:解决了固定时间窗口的边界问题,流量比较平稳

      缺点:因为维护了更小力度的窗口及统计,所以空间和时间复杂度更高,而且会直接拒绝超过阈值的请求,没法儿让请求排队。

      适用场景:qps限流,例如sentinel中的qps限流直接拒绝策略就是使用的滑动时间窗口

      漏桶算法

      原理:有一个维护请求的桶,相当于一个缓冲区,然后桶以一定的速率放行请求。

      优点:流量整形,使请求以平缓的速率进来,可以缓冲流量。

      缺点:无法面对突发流量

      适用场景:需要流量整形的地方,流量缓冲的场景。例如sentinel的qps限流的排队等待策略

       

      令牌桶算法

      原理:有一个维护令牌的桶,按照一定的速率生成令牌,放入桶中,如果请求获得了令牌就放行,否则就拒绝

      优点:可以面对一定的突发流量

      缺点:放行的流量不平缓,无法起到流量缓冲的目的

      适用场景:需要接受一些突发的流量的场景。sentinel的warm up就是用的这种,还有一些开放平台的api调用次数限制也适用用这个。


http://www.kler.cn/a/430270.html

相关文章:

  • ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
  • 运行vue项目,显示“npm”无法识别为 cmdlet、函数、脚本文件或可操作程序的名称
  • 数据结构:包装类和泛型
  • QT自定义工具条渐变背景颜色一例
  • C语言的语法
  • 【C++】B2106 矩阵转置
  • 【Leetcode Top 100】94. 二叉树的中序遍历
  • 观察者模式的理解和实践
  • vue的指令
  • Python 网络爬虫进阶:突破数据采集的边界
  • 【金猿CIO展】海博科技总经理兼CIO韩东明:大数据与大模型,驱动智能运维的新引擎...
  • 在Excel中实现选中单元格行列变色的功能
  • 基于SpringBoot实现验证码功能
  • C# WinForm —— 39 40 41 42 DataGridView 介绍与使用
  • k8s 之 Deployment
  • vue vxe-table 实现财务记账凭证并打印
  • Unix、GNU、BSD 风格中 ps 参数的区别
  • git将一个项目的文件放到另一个项目的文件夹下
  • 适配器模式 (Adapter) · 对象适配器 · 类适配器 · 实际开发中的应用
  • 游戏引擎学习第35天
  • 群控系统服务端开发模式-应用开发-邮件发送工具类
  • 【opencv入门教程】3. Rect 类用法
  • 嵌入式学习(15)-stm32通用GPIO模拟串口发送数据
  • 设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计
  • 大舍传媒-关于海外媒体宣发的探讨
  • 【ONE·基础算法 || 动态规划(四)】