术语表
速率限制 (Rate Limiting)
速率限制是一种控制客户端对服务器请求频率的技术手段。通过限制单位时间内的请求数量,可以保护服务器资源,防止恶意攻击和滥用行为。常见的速率限制算法包括固定窗口、滑动窗口、令牌桶和漏桶等。在实际应用中,速率限制通常部署在API网关、反向代理或应用服务器层。
滑动窗口算法 (Sliding Window Algorithm)
滑动窗口算法是一种精确的速率限制算法。它通过维护一个时间窗口来统计请求数量,当窗口滑动时,旧的请求记录会被移除,新的请求记录会被添加。滑动窗口算法的优点是精确度高,能够准确控制请求频率;缺点是需要维护窗口内的请求记录,内存消耗相对较大。在实现上,滑动窗口可以基于时间戳记录或位图统计。
令牌桶算法 (Token Bucket Algorithm)
令牌桶算法是一种允许突发流量的速率限制算法。系统以恒定速率向桶中添加令牌,每个请求需要消耗一个令牌。当桶满时,新添加的令牌会被丢弃;当桶空时,请求会被拒绝。令牌桶算法的优点是允许一定程度的突发流量,同时又能保证长期请求速率不超过设定值。这种特性使其成为API速率限制中最常用的算法之一。
窗口大小 (Window Size)
窗口大小是滑动窗口算法中的关键参数,表示统计请求数量的时间范围。窗口越大,统计结果越平滑,但对突发流量的响应越慢;窗口越小,对流量变化的响应越敏感,但可能导致误判。在实际应用中,窗口大小的选择需要根据业务特点和流量模式来确定。常见的窗口大小包括1秒、10秒、1分钟等。
桶容量 (Bucket Capacity)
桶容量是令牌桶算法中的关键参数,表示桶中可以容纳的最大令牌数。桶容量越大,允许的突发流量越大;桶容量越小,对请求速率的控制越严格。在实际应用中,桶容量的设置需要平衡突发处理能力和资源保护。通常,桶容量设置为允许突发请求数的1.5到2倍较为合适。
令牌生成速率 (Token Generation Rate)
令牌生成速率是令牌桶算法中的关键参数,表示每秒向桶中添加的令牌数量。这个参数直接决定了长期来看的平均请求处理速率。令牌生成速率越高,系统处理请求的能力越强;令牌生成速率越低,系统对请求的限制越严格。在实际应用中,令牌生成速率通常设置为系统最大处理能力的80%左右。
突发流量 (Burst Traffic)
突发流量是指在短时间内出现的大量请求。在实际应用中,突发流量可能由用户行为变化、定时任务触发、系统故障恢复等原因引起。不同的速率限制算法对突发流量的处理能力不同:滑动窗口算法会立即拒绝超出限制的请求,而令牌桶算法则可能通过消耗积累的令牌来处理部分突发请求。理解突发流量的处理机制对于设计合理的限流策略至关重要。
限流策略 (Rate Limiting Strategy)
限流策略是根据具体业务需求选择和配置速率限制算法的方案。常见的限流策略包括:按IP地址限流、按用户ID限流、按API端点限流、按时间窗口限流等。在实际应用中,通常需要组合多种限流策略来达到最佳的保护效果。例如,可以对所有API请求设置全局限流,同时对特定的敏感API设置更严格的限流规则。
UD5工具箱