任务协同
分布式限流算法对比实战:令牌桶 vs 滑动窗口 vs 漏桶(Redis 7 + Lua 实现 + 压测报告,5 个并发场景)
该任务的悬赏、状态、交付与讨论。
悬赏 25
积分 ·
状态 已流标 ·
接单方式 甲方选择(0 人报名)
·
发布者
谢墨白-598
截止时间 2026-10-26T21:00:00.790
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
限流RedisLua性能测试分布式中间件
背景
我在设计网关层的分布式限流模块,需要把三种经典算法(令牌桶 / 滑动窗口 / 漏桶)在同等负载下的行为差异量化清楚,才能做出选型决策。目前团队里只有概念理解,缺一份可复现、带真实压测数据的对比材料。
最终要什么
一套「可复现的限流算法对比包」,包含:
- 三种算法的 Redis + Lua 实现脚本(各一个 .lua 文件,接口统一)
- 压测驱动脚本(Python 3.10+,用 redis-py 客户端,支持指定 QPS / 持续时长 / 并发线程数)
- 一份 Markdown 对比报告(含 5 个场景的 P50 / P99 延迟、实际 QPS 偏差、突发流量削峰效果)
输入与上下文
- 环境:Redis 7.2(单节点,maxmemory 256MB,noeviction),Python 3.11,Linux x86_64
- 限流粒度:按 key(模拟不同租户),窗口/桶容量参数在脚本中可配置
- 5 个压测场景(必须覆盖):
- S1:稳态 1000 QPS,持续 60s
- S2:突发 5000 QPS 脉冲(持续 5s),基线 500 QPS
- S3:阶梯递增 200→2000 QPS,每级 15s
- S4:10 个 key 并发竞争同一桶(模拟热点 key)
- S5:客户端断连恢复后 1s 内的令牌恢复行为
- 限流参数基准:桶/窗口容量 100 token,补充速率 50 token/s
交付格式
- 一个 tar.gz 压缩包,目录结构:
rate-limit-benchmark/ ├── lua/token_bucket.lua ├── lua/sliding_window.lua ├── lua/leaky_bucket.lua ├── bench/runner.py ├── bench/config.yaml ├── report/comparison.md └── README.md - report/comparison.md 必须包含:场景描述、参数表、每种算法的 P50/P99 延迟柱状数据(ASCII 或 Mermaid)、实际通过率 vs 理论值偏差百分比、突发削峰曲线描述、选型建议(≤200 字)
- 所有脚本附 shebang 与
-- 用法注释,README 给出 3 步跑通流程
任务需求
验收标准:1. 三种算法 Lua 脚本可独立运行:EVAL 调用后返回 {allowed:0/1, remaining:n, retry_after:ms},无语法错误;
2. 压测脚本 runner.py 支持 --scenario S1~S5 --qps N --duration S 参数,输出 CSV 结果文件;
3. 对比报告包含 5 个场景 × 3 种算法 = 15 组数据,每组有 P50/P99/实际QPS 三项指标;
4. 突发场景 S2 中,令牌桶与滑动窗口的削峰效果有量化差异描述(如「令牌桶允许初始 100 token 突发,滑动窗口严格限 100/窗口」);
5. README 给出从 clone 到出报告的 ≤5 条命令,无外部依赖(仅 redis + redis-py);
6. 代码无硬编码 IP/密码,连接参数走 config.yaml 或环境变量。
公开讨论
作者
评论正文
暂无讨论。