技术文摘
面试必知:4 种经典限流算法剖析
面试必知:4 种经典限流算法剖析
在当今互联网高并发的场景下,限流算法成为保障系统稳定性和可靠性的重要手段。对于面试者来说,了解常见的限流算法是必备的知识储备。下面将详细剖析 4 种经典的限流算法。
令牌桶算法
令牌桶算法的核心思想是按照一定的速率往桶中放入令牌。请求到来时,会尝试从桶中获取令牌,如果桶中有令牌则允许通过,否则拒绝请求。该算法能够应对突发流量,因为只要桶中有足够的令牌,就能处理较大的突发请求。
例如,设定每秒放入 10 个令牌,桶的最大容量为 50 个令牌。当有一个瞬间涌入 30 个请求时,只要桶中令牌数量足够,这些请求都能被处理。
漏桶算法
漏桶算法则是一个固定容量的桶,水以固定的速率从桶中流出。请求进入漏桶就相当于水进入桶中,如果水的流入速率大于流出速率,桶会满,多余的水会被丢弃。
漏桶算法能平滑处理请求,无论请求的突发程度如何,输出的请求速率都是恒定的。
计数器算法
这是一种简单直观的限流算法,通过维护一个单位时间内的请求计数器来实现限流。例如,设定每秒最多处理 100 个请求,每当一个请求到来时,计数器加 1。如果在当前秒内计数器的值超过了 100,则拒绝后续的请求。
然而,计数器算法存在一个问题,即在单位时间的切换瞬间可能会出现瞬间的高并发流量。
滑动窗口算法
滑动窗口算法是对计数器算法的改进。它将时间划分为多个小的时间窗口,通过滑动窗口来统计请求数量,从而更精确地控制流量。
比如,将 1 分钟划分为 6 个 10 秒的窗口,每个窗口独立统计请求数量。随着时间的推移,窗口不断滑动,保证限流的准确性和灵活性。
了解和掌握这 4 种经典的限流算法,对于应对面试中的相关问题以及实际工作中的系统设计和优化都具有重要意义。不同的限流算法在不同的场景下有着各自的优势和适用范围,需要根据具体的业务需求和系统特点进行选择和应用。
- 解读 Spring Boot 流行的 16 条实践
- 埃森哲被告:花 2 亿耗时 2 年,网站未建成 Java 写不佳
- 干货:GitHub 获 2.6 万标星的 Python 算法新手入门指南
- 5G 来临,App 的未来将由 JavaScript、Flutter 还是 Native 主宰?
- Python、Java、C#、Perl 创始人齐聚共话编程语言未来
- Hbase 架构原理的易懂解析
- 11 个 Python Pandas 高效工作小技巧及代码实例
- 8 个流行的 Python 可视化工具包,你偏爱哪一个?
- 以设计视角审视 Redux
- 数据可视化:十种出色的 JavaScript 图表库推荐
- 2019 年 Java Web J2EE 中 SSH 与 SSM 两大框架之比较
- 浅析常用的几种负载均衡架构
- Web 开发框架选 Flask 还是 Django?
- Java 帝国的邪恶行径:如何欺压小函数
- 软件中 Bug 如何减少?数据表明程序员是 Bug 产生“祸首”