常见限流算法总结

在这里插入图片描述

概述

限流算法常见的包括:

  • 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
  • 令牌桶算法(Token Bucket)
  • 漏桶算法(Leaky Bucket)

固定窗口计数器算法

固定窗口计数器算法概念如下:

  • 将时间划分为多个窗口,窗口时间跨度称为Interval,本例中为1000ms;
  • 每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本例为3
  • 如果计数器超过了限流阈值,则超出阈值的请求都被丢弃。

在这里插入图片描述

滑动窗口计数器算法

滑动窗口计数器算法会将一个窗口划分为n个更小的区间,例如

  • 窗口时间跨度Interval为1秒;区间数量 n = 2 ,则每个小区间时间跨度为500ms
  • 限流阈值依然为3,时间窗口(1秒)内请求超过阈值时,超出的请求被限流
  • 窗口会根据当前请求所在时间(currentTime)移动,窗口范围是从(currentTime-Interval)之后的第一个时区开始,到currentTime所在时区结束。

在这里插入图片描述

令牌桶算法

令牌桶算法说明:

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃

在这里插入图片描述

漏桶算法

漏桶算法说明:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;
  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。
  • 可以理解成请求在桶内排队等待

在这里插入图片描述

限流算法对比

在这里插入图片描述

Sentinel的限流与Gateway的限流有什么差别?

  • Gateway则采用了基于Redis实现的令牌桶算法。
    而Sentinel内部却比较复杂:
  • 默认限流模式是基于滑动时间窗口算法
  • 排队等待的限流模式则基于漏桶算法
  • 而热点参数限流则是基于令牌桶算法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级编程语言,以其高效、易读易写、语法简洁等特点广受欢迎。它具有很多扩展库和模块,可以解决许多实际问题,因此不仅在软件开发中被广泛应用,而且在算法竞赛中也日益受到青睐。 竞赛中,Python的优点更为明显。首先,竞赛有一个时间限制,Python以其动态类型和解释性特点,能够快速编写和测试代码,调试起来相对简单,使用起来非直观。其次,Python的库和工具更加灵活,不仅可以使用规的数据结构和算法进行编程,也可以使用各种各样的模块,如NumPy、SciPy、pandas等,来提高算法的效率和正确性。这些模块不仅提供了许多高级函数,而且可以像Matlab一样实现矩阵计算和数据分析,简化了算法的实现流程。 但是,Python在竞赛中也存在一些局限性,如运行速度较慢,内存占用比较大等。但是这些问题可以通过代码优化和算法优化等手段来解决。此外,在一些涉及比赛性质的题目中,Python的弱点不易被占用。例如,如果比赛中有一道要求对整个输入流进行统计处理的题目,Python的迭代器优点将会非明显。 总结来说,Python在竞赛中的优点是非多的,尤其是在算法竞赛中。它因简洁、灵活、直观而受到选手的欢迎,并且可应对许多的问题和情况。另外,Python作为一种高级语言,还能够激发创造性思维和算法的设计,有很好的普及和应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值