Reliability & Operations
Rate Limiting
限流策略
Rate limiting 是限制某个操作频率不超过阈值的机制。大型系统里常用它来保护资源与服务,同时防止 API 被恶意或无意过度使用。

为什么需要 Rate Limiting?
- 防止 DoS 导致资源耗尽
- 控制成本(限制 auto-scaling 带来的费用)
- 作为防御或缓解攻击
- 控制高吞吐 API 的数据流量
Algorithms
常见限流算法:
Leaky Bucket
请求进入队列,按固定速率处理,队列满则丢弃(leak)。
Token Bucket
请求必须获取 token 才能处理,没 token 则拒绝。Token 会按时间补充。
Fixed Window
以固定窗口统计请求数,超过阈值则拒绝。
Sliding Log
记录每个请求时间戳,统计时间窗口内请求数,超阈值则拒绝。
Sliding Window
结合 fixed window 与 sliding log:计算当前窗口 + 上一窗口的加权值,平滑突发流量。
Rate Limiting in Distributed Systems
分布式场景下主要问题:
Inconsistencies
多个 nodes 各自限流会导致全局超限。解决方案包括 sticky sessions 或集中式存储(如 Redis),但会带来 fault tolerance 与 latency 问题。
Race Conditions
使用 get-then-set 容易发生竞态,导致计数被覆盖,限流失效。可以用分布式锁,但会成为 bottleneck;更好的做法是用原子操作(set-then-get)来快速更新计数。