← 中文资源

简体中文版本

在 Node.js 中构建限流反向代理网关

流式转发的反向代理:按 API 键执行令牌桶或固定窗口限流,超限返回 429 与 Retry-After。

阅读英文原文

目标

构建在转发上游服务前执行逐键限流的 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。