🎯 什麼情境該想到我
當你要限制「某使用者/IP/API 在一段時間內最多幾次請求」,保護服務不被流量或濫用打垮時。
⚙️ 怎麼用(選演算法)
- Token Bucket(權杖桶):以固定速率補充權杖,每次請求耗一個;桶有容量 → 允許突發、最常用。
- Leaky Bucket(漏桶):請求排隊以固定速率流出 → 平滑輸出、不允許突發。
- 固定視窗計數:每個時間窗計數,簡單但視窗邊界會爆量(兩窗交界瞬間 2 倍)。
- 滑動視窗:用滑動時間窗平滑計數,較準但成本略高。
實作要點:分散式下把計數放共享儲存(如 Redis),並回傳 429 Too Many Requests + Retry-After。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 分散式多實例要共享狀態,否則每台各自限流=實際上限被放大 N 倍。
🔗 相關工具
- 工具-服務容錯設計(限流是容錯的一環)、工具-透明多級分流、工具-系統設計思考框架