目标
构建在转发上游服务前执行逐键限流的 HTTP 网关:超限以携带 Retry-After 的 429 应答,其余请求连同头部与请求体原样流式转发。
要点
三段可组合流水线:HTTP 接收、limiter 判定(decide 一次返回放行/余量/重试延迟)、流式代理。限流模块是可替换接口,内存版换 Redis 不动代理代码;hop-by-hop 头按 RFC 列表过滤;大体积请求体以流穿透、内存恒定。
提示
限流判定必须先于 proxy() 调用;Retry-After 直接取自桶补充速率算出的毫秒数。
验证
限流器单测用注入时钟精确到毫秒验证补充;32MB 大体积转发测试断言堆增量有界,证明是流式而非缓冲。 项目目录骨架:
rate-limit-gateway/
├── src/
│ ├── server.js
│ ├── proxy.js
│ ├── limiters/
│ │ ├── tokenBucket.js
│ │ └── fixedWindow.js
│ └── config.js
├── test/
│ ├── limiters.test.js
│ └── proxy.test.js
├── config.json
└── package.json
实施阶段:Limiter modules → Streaming proxy → Gateway pipeline → End-to-end tests。