首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >客户端请求服务端用什么限流算法好-思路分析分享

客户端请求服务端用什么限流算法好-思路分析分享

原创
作者头像
GeekLiHua
修改2025-07-10 17:16:37
修改2025-07-10 17:16:37
2230
举报
文章被收录于专栏:高并发高并发

客户端请求服务端用什么限流算法好-思路分析分享

选择限流方式需要根据具体业务场景的特点和需求来决定,主要考虑以下几个关键因素:

  1. 业务对突发流量的容忍度
  2. 系统对请求处理延迟的敏感性
  3. 限流精确性要求
  4. 实现和维护的复杂度

主流限流算法

1. 令牌桶算法

核心原理

令牌桶算法维护一个容量固定的"令牌桶",系统以恒定速率(如每秒100个)向桶中添加令牌。每个请求需要获取一个令牌才能被放行,当桶中令牌耗尽时,新请求将被拒绝或排队等待。

技术特点

  • 突发处理:允许短时间内消耗桶中积累的所有令牌,适应合理突发
  • 平滑过渡:限流效果自然,不会造成请求处理的剧烈波动
  • 实现复杂度:中等,需要维护令牌计数和最后更新时间

适用场景

  • 需要弹性处理突发流量的客户端
  • 对用户体验要求较高的应用
  • 大多数通用限流需求

2. 漏桶算法

核心原理

漏桶将请求视为水滴,以固定速率(如每秒100滴)从桶底漏出。当桶内水量达到容量上限时,新请求将被丢弃或排队。

技术特点

  • 绝对平滑:输出速率完全恒定,无任何波动
  • 零突发:严格限制请求速率,不因突发流量妥协
  • 延迟可能:可能导致请求处理延迟增加

适用场景

  • 对下游服务保护要求严格的系统
  • 需要完全恒定请求速率的特殊场景
  • 金融、支付等对稳定性要求极高的领域

3. 时间窗口算法

固定窗口计数器

核心原理

将时间划分为固定长度窗口(如1秒),统计每个窗口内的请求数,超过阈值(100)即触发限流。

优缺点

  • 实现简单,内存占用小
  • 存在窗口切换时的双倍流量风险
滑动窗口计数器

核心原理

通过多个时间片(如10个100ms片)实现滑动窗口统计,精确控制任意1秒时间跨度内的请求量。

优缺点

  • 限流更精确,避免边界问题
  • 实现复杂度较高,需维护多个时间片

适用场景

  • 对实现简单性要求高的轻量级应用
  • 可以接受短暂超限的业务场景
  • 需要精确控制但不愿使用令牌桶的情况

我的业务选择

我的业务特点

我做的是一个工作流系统,给插件调用添加限流功能。

工作流系统特征:

  1. 非均匀请求分布:工作流执行过程中,插件调用往往呈现波峰波谷的请求模式。
  2. 合理突发需求:某些业务环节需要短时间内集中调用多个插件。
  3. 响应敏感性:插件调用的延迟会直接影响整个工作流的执行效率。
  4. 错误容忍度:相比金融支付等场景,工作流系统通常可以接受适度的速率波动。

限流算法结论对比

考量维度

令牌桶

漏桶

固定窗口

滑动窗口

突发处理能力

★★★★★

★☆☆☆☆

★★★☆☆

★★★★☆

工作流连贯性

★★★★★

★★☆☆☆

★★★☆☆

★★★★☆

实现复杂度

★★★☆☆

★★★☆☆

★★★★★

★★☆☆☆

资源利用率

★★★★★

★★☆☆☆

★★★☆☆

★★★★☆

令牌桶算法的适配性优势

1. 对突发流量的友好支持
  • 自然适应工作流特性:当工作流中多个插件需要同时被触发时,令牌桶积累的令牌可以一次性消耗,满足这种合理突发需求。

例如:工作流执行到支付环节时,需要并发调用风控插件、支付网关插件和日志记录插件,令牌桶允许这些插件同时获取令牌执行,确保支付流程的完整性,让一些高优先级的业务可以获取更多令牌,快速完成。

  • 对比劣势:漏桶算法会强制平滑这种自然形成的请求波峰,导致不必要的延迟

例如:在上述支付场景中,漏桶算法会强制将三个插件的调用串行化处理,可能使支付响应时间从200ms延长至600ms,严重影响用户体验。

2. 平滑过渡保障体验
  • 无感知限流:令牌桶在接近限流阈值时会产生渐进式的限制效果,不会像固定窗口算法那样在窗口切换时出现明显的请求通过/拒绝的"锯齿现象"

例如:当工作流环节设置的100QPS即将耗尽时,第101个请求可能只延迟10ms获取令牌,而固定窗口会直接拒绝,造成业务中断。

  • 业务价值:这种平滑性对保持工作流执行的连贯性非常重要

例如:在订单履约工作流中,这种渐进式限流可以确保库存扣减、物流调度、通知发送等关键插件都能有序完成,避免因 abrupt限流导致订单状态不一致。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端请求服务端用什么限流算法好-思路分析分享
    • 主流限流算法
      • 1. 令牌桶算法
      • 2. 漏桶算法
      • 3. 时间窗口算法
    • 我的业务选择
      • 我的业务特点
      • 限流算法结论对比
      • 令牌桶算法的适配性优势
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档