速率限制
概要
速率限制(rate limiting),是按时间单位限制来自特定来源的请求数的技术。例如设定“同一 IP 地址每秒最多 10 个请求”这样的上限,拒绝超出的请求。它被用于防止服务器过载、抑制垃圾帖子、确保 API 的公平使用等广泛的目的。
主要的算法
实现速率限制有多种算法。最简单的是固定窗口方式,每隔一定时间(例如 1 分钟)重置计数器。实现容易,但存在跨越窗口的分界时,短时间内会有上限 2 倍的请求通过的问题。
滑动窗口方式会一直追踪最近 N 秒内的请求数。它解决了固定窗口的分界问题,但实现稍微复杂一些。令牌桶方式准备一个以固定速度补充令牌的桶,每个请求消耗一个令牌。它能在一定程度上容许突发的请求,同时防止持续的过载。
在提问箱这类服务中的应用
在提问箱这类服务中,也会对匿名提问的投递使用速率限制。对来自同一来源的投递频率,设置正常使用几乎不会达到的上限,就能在抑制对一般用户影响的同时,放慢手动骚扰投递的节奏。
速率限制与工作量证明和蜜罐字段不同,对人手动进行的骚扰也有效。在同时关系到机器人程序对策和针对人的对策这一点上,它是构成多层防御的要素之一。