admin管理员组

文章数量:1028482

架构必知的限流算法

Hello 我是方才,10人团队leader、4年架构经验,曾备考1个月拿下软考架构师(49/53/50) 文末,方才送你一份25年最新的架构师备考资料,记得领取哟!

首先我们思考下,为什么需要限流呢?

前面在负载均衡架构中和架构的演化中,方才提到,负载均衡的作用是将流量均分,让集群节点尽可能的均分负载,从而保证对所有用户的可用性

但系统的资源始终是有限的,不可能一直无限增加资源,所以就可能出现流量太大,服务器直接崩溃的情况。那这个时候,相比让整个服务器崩溃,就只能牺牲部分用户的体验,通过限流,保证服务器的整体稳定运行,为绝大数用户提供正常服务

比如说:Trae 的排队机制,就是一种限流手段(或者通过产品层面的设计,比如个税app的提前预约机制,也是限流思维的应用)。

image-20250424221626646

限流的算法

算法

原理

优点

缺点

适用场景

固定窗口计数器

固定时间窗口内统计请求数,超限拒绝。

实现简单,内存消耗低。

窗口边界可能出现流量突刺。

对流量突发不敏感的低频接口限流。

滑动窗口计数器

将**时间窗口划分为小窗口,**统计滑动窗口内总请求数。

精度高,缓解边界突刺问题。

实现复杂,内存占用略高。

API网关、高频接口限流。

漏桶算法

以恒定速率处理请求,桶满则拒绝。

流量绝对平滑,避免突发冲击。

无法利用系统空闲资源处理突发流量。

音视频流控等严格平滑场景。

令牌桶算法

固定速率生成令牌,请求需获取令牌。

允许突发流量,灵活性高。

突发可能耗尽令牌导致后续限流。

网络流量控制等需兼顾突发能力的场景。

分布式令牌桶(就是令牌桶的不同实现)

使用中心化存储(如Redis)维护全局令牌桶,原子操作保证一致性。

支持全局限流,多节点协同。

依赖中心存储的性能和可用性。

分布式系统全局限流(如秒杀活动)。

固定时间窗口

image-20250424230044477

滑动窗口计数

image-20250424230102399

漏桶算法

image-20250424230236164

令牌桶算法

image-20250424230300784

限流策略

限流策略是基于限流算法的更加复杂的应用。

策略

原理

优点

缺点

适用场景

自适应限流

根据系统负载(CPU、内存、响应时间)动态调整阈值。

灵活适应系统状态变化。

实现复杂,依赖监控指标。

云原生、微服务动态资源分配场景。

基于响应时间的限流

根据请求响应时间调整限流阈值(如响应超长则触发限流)。

直接保护系统免受过载影响。

存在滞后性(响应变长时可能已过载)。

延迟敏感的服务(如支付系统)。

分片限流

按用户、服务或区域分片,各分片独立限流。

避免全局限流的单点瓶颈。

配置复杂度高。

多租户系统或地理分布服务。

排队等待

超限请求放入队列等待处理,而非直接拒绝。

提升用户体验(减少拒绝)。

队列过长可能导致延迟飙升。

异步任务处理(如消息队列)。

预热启动

系统冷启动时逐步增加限流阈值,避免瞬间流量压垮系统。

平滑过渡到高负载状态。

冷启动阶段可能限制吞吐量。

服务启动或长时间低负载后恢复。

对比说明

  1. 1. 流量控制精度:滑动窗口 > 固定窗口 > 漏桶/令牌桶。
  2. 2. 突发处理能力:令牌桶 > 漏桶 > 滑动窗口。
  3. 3. 实现复杂度:自适应限流 > 分布式限流 > 基础算法。
  4. 4. 适用扩展性:分布式限流 > 分片限流 > 单机算法。

可根据实际场景组合使用(如令牌桶+滑动窗口提升突发处理与精度)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-25,如有侵权请联系 cloudcommunity@tencent 删除架构流量算法系统服务

架构必知的限流算法

Hello 我是方才,10人团队leader、4年架构经验,曾备考1个月拿下软考架构师(49/53/50) 文末,方才送你一份25年最新的架构师备考资料,记得领取哟!

首先我们思考下,为什么需要限流呢?

前面在负载均衡架构中和架构的演化中,方才提到,负载均衡的作用是将流量均分,让集群节点尽可能的均分负载,从而保证对所有用户的可用性

但系统的资源始终是有限的,不可能一直无限增加资源,所以就可能出现流量太大,服务器直接崩溃的情况。那这个时候,相比让整个服务器崩溃,就只能牺牲部分用户的体验,通过限流,保证服务器的整体稳定运行,为绝大数用户提供正常服务

比如说:Trae 的排队机制,就是一种限流手段(或者通过产品层面的设计,比如个税app的提前预约机制,也是限流思维的应用)。

image-20250424221626646

限流的算法

算法

原理

优点

缺点

适用场景

固定窗口计数器

固定时间窗口内统计请求数,超限拒绝。

实现简单,内存消耗低。

窗口边界可能出现流量突刺。

对流量突发不敏感的低频接口限流。

滑动窗口计数器

将**时间窗口划分为小窗口,**统计滑动窗口内总请求数。

精度高,缓解边界突刺问题。

实现复杂,内存占用略高。

API网关、高频接口限流。

漏桶算法

以恒定速率处理请求,桶满则拒绝。

流量绝对平滑,避免突发冲击。

无法利用系统空闲资源处理突发流量。

音视频流控等严格平滑场景。

令牌桶算法

固定速率生成令牌,请求需获取令牌。

允许突发流量,灵活性高。

突发可能耗尽令牌导致后续限流。

网络流量控制等需兼顾突发能力的场景。

分布式令牌桶(就是令牌桶的不同实现)

使用中心化存储(如Redis)维护全局令牌桶,原子操作保证一致性。

支持全局限流,多节点协同。

依赖中心存储的性能和可用性。

分布式系统全局限流(如秒杀活动)。

固定时间窗口

image-20250424230044477

滑动窗口计数

image-20250424230102399

漏桶算法

image-20250424230236164

令牌桶算法

image-20250424230300784

限流策略

限流策略是基于限流算法的更加复杂的应用。

策略

原理

优点

缺点

适用场景

自适应限流

根据系统负载(CPU、内存、响应时间)动态调整阈值。

灵活适应系统状态变化。

实现复杂,依赖监控指标。

云原生、微服务动态资源分配场景。

基于响应时间的限流

根据请求响应时间调整限流阈值(如响应超长则触发限流)。

直接保护系统免受过载影响。

存在滞后性(响应变长时可能已过载)。

延迟敏感的服务(如支付系统)。

分片限流

按用户、服务或区域分片,各分片独立限流。

避免全局限流的单点瓶颈。

配置复杂度高。

多租户系统或地理分布服务。

排队等待

超限请求放入队列等待处理,而非直接拒绝。

提升用户体验(减少拒绝)。

队列过长可能导致延迟飙升。

异步任务处理(如消息队列)。

预热启动

系统冷启动时逐步增加限流阈值,避免瞬间流量压垮系统。

平滑过渡到高负载状态。

冷启动阶段可能限制吞吐量。

服务启动或长时间低负载后恢复。

对比说明

  1. 1. 流量控制精度:滑动窗口 > 固定窗口 > 漏桶/令牌桶。
  2. 2. 突发处理能力:令牌桶 > 漏桶 > 滑动窗口。
  3. 3. 实现复杂度:自适应限流 > 分布式限流 > 基础算法。
  4. 4. 适用扩展性:分布式限流 > 分片限流 > 单机算法。

可根据实际场景组合使用(如令牌桶+滑动窗口提升突发处理与精度)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-25,如有侵权请联系 cloudcommunity@tencent 删除架构流量算法系统服务

本文标签: 架构必知的限流算法