做API的都知道限流,但大多数人选算法像抓阄。Token Bucket看着优雅,漏桶匀速出水, bursts 也能扛——直到你的账单突然炸了。

问题出在"允许突发"这个设计。Token Bucket 把未用完的配额存起来,用户攒够 100 个 token 一瞬间打空,你的数据库当场去世。Sliding Window 没这毛病,它按时间片严格切割,但实现复杂度高一个数量级,小公司根本不想碰。

Cloudflare 工程师去年在内部复盘时写过一句:「我们切到 Sliding Window 后,异常流量识别率涨了 40%,但延迟多了 8ms。」这 8ms 就是代价。

更尴尬的是行业现状。AWS API Gateway 默认 Token Bucket,阿里云走漏桶,GCP 搞了个混合变种。同一个"限流"需求,三家实现三种脾气,迁移时全得重写。

有个做支付的朋友,双 11 前没测 bursts 场景,Token Bucket 攒的配额被爬虫 3 秒扫光,风控系统没来得及响。事后他换了 Sliding Window,但代码里多了 200 行时间窗口对齐的逻辑——"像给赛车装了个拖拉机变速箱,慢是慢点,至少不翻车。"