系统设计
- 分类
- 分布式系统
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/29 15:40
答案
1. 固定窗口限流:思路是固定单位时间内处理的请求数量,超过该数量的请求直接丢弃。但是这种方法不能应对突然激增的流量,比如我们固定1s处理10个请求,在第一秒的前0.5秒没有请求,后0.5秒进来了十个请求,第二秒的前0.5秒又进来了十个请求,相当于在中间这一秒处理了二十个请求,这可能就导致服务器被瞬时的大量请求击垮。 2. 滑动窗口限流:相当于固定窗口的升级版,它对时间进行分片,窗口根据分片后的时间单位进行移动,保证窗口内的请求数量是符合要求的,如果超出要求则直接丢弃。例如1s处理十个请求,以0.1s进行划分,则会统计1s这个时间窗口内的流量,每经过0.1s,窗口向右滑动一格,这样就能保证应对激增流量,比如0.9s来了10个请求,如果是固定窗口,第二秒内仍然能够进来请求,而在滑动窗口下,包含了0.9s的窗口内都不能进来请求。 3. 漏桶算法:漏桶算法将请求处理的过程比喻成漏桶漏水,也就是我们以任意的速率向漏桶当中加水,漏桶会以一个固定的速率进行漏水,放到请求处理上来说就是以任意速率接收请求,漏桶在以固定速率释放请求,从而限制了请求的流量。我们可以使用一个队列来作为漏桶,请求先缓存在队列当中,然后服务器按照指定的速率去队列中拿取请求进行处理,当队列满的时候则直接拒绝新的请求。对于滑动窗口来说,一旦请求超出阈值则直接拒绝,而漏桶算法则相对没那么粗暴,他用队列缓存请求,只有当请求堆积,队列满的时候才会拒绝请求。 4. 令牌桶算法:令牌桶算法则是按照一定的速率生成令牌,放入桶中,当请求进来时,需要先获得一个令牌,获得令牌的请求就能够被处理。更适合于流量突增的场景,因为对于漏桶算法,即使流量突增,仍然是以固定的速率处理请求,而对于令牌桶,如果流量突增,则可以拿完存的所有令牌,快速处理。
相关题目(5)
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(分布式).md
knowledge_noteQuestion 13: 常见的限流算法有哪些?
Source answer: 1. 固定窗口限流:思路是固定单位时间内处理的请求数量,超过该数量的请求直接丢弃。但是这种方法不能应对突然激增的流量,比如我们固定1s处理10个请求,在第一秒的前0.5秒没有请求,后0.5秒进来了十个请求,第二秒的前0.5秒又进来了十个请求,相当于在中间这一秒处理了二十个请求,这可能就导致服务器被瞬时的大量请求击垮。 2. 滑动窗口限流:相当于固定窗口的升级版,它对时间进行分片,窗口根据分片后的时间单位进行移动,保证窗口内的请求数量是符合要求的,如果超出要求则直接丢弃。例如1s处理十个请求,以0.1s进行划分,则会统计1s这个时间窗口内的流量,每经过0.1s,窗口向右滑动一格,这样就能保证应对激增流量,比如0.9s来了10个请求,如果是固定窗口,第二秒内仍然能够进来请求,而在滑动窗口下,包含了0.9s的窗口内都不能进来请求。 3. 漏桶算法:漏桶算法将请求处理的过程比喻成漏桶漏水,也就是我们以任意的速率向漏桶当中加水,漏桶会以一个固定的速率进行漏水,放到请求处理上来说就是以任意速率接收请求,漏桶在以固定速率释放请求,从而限制了请求的流量。我们可以使用一个队列来作为漏桶,请求先缓存在队列当中,然后服务器按照指定的速率去队列中拿取请求进行处理,当队列满的时候则直接拒绝新的请求。对于滑动窗口来说,一旦请求超出阈值则直接拒绝,而漏桶算法则相对没那么粗暴,他用队列缓存请求,只有当请求堆积,队列满的时候才会拒绝请求。 4. 令牌桶算法:令牌桶算法则是按照一定的速率生成令牌,放入桶中,当请求进来时,需要先获得一个令牌,获得令牌的请求就能够被处理。更适合于流量突增的场景,因为对于漏桶算法,即使流量突增,仍然是以固定的速率处理请求,而对于令牌桶,如果流量突增,则可以拿完存的所有令牌,快速处理。
Reviewed answer: 常见限流算法包括固定窗口、滑动窗口、漏桶和令牌桶。固定窗口实现简单但有突刺问题;滑动窗口更平滑;漏桶按固定速率处理请求;令牌桶更适合应对突发流量。