跳到主要内容

认识

2025年01月05日
柏拉文
越努力,越幸运

一、认识


服务限流(Rate Limiting 是一种保护系统免受过高请求负载的技术,它通过控制单位时间内允许的请求数量来保证服务的稳定性和高可用性。在高并发场景下,限流能够有效防止滥用、避免服务器过载,并保障系统的可预测性和公平性。

Node.js 中,服务限流通常用于 API 请求、用户登录、支付请求等敏感操作,目的是防止服务遭遇暴力攻击、请求洪水或其他形式的过度访问。

二、策略


2.1 令牌桶(Token Bucket)

在令牌桶算法中,每秒生成一定数量的令牌,请求需要消耗令牌来访问服务。如果令牌用完了,新的请求会被拒绝或等待。

2.2 漏斗桶(Leaky Bucket)

漏斗桶算法使用一个固定大小的桶来存储请求。当请求到达时,它们按顺序进入桶,桶中的请求按一定速率处理。桶满时,新的请求会被丢弃。

2.3 固定窗口(Fixed Window)

固定窗口限流策略将时间划分为固定的窗口期,每个窗口期内限制一定数量的请求。一旦请求数量超过限制,所有请求都会被拒绝,直到下一个窗口期开始。

2.4 滑动窗口(Sliding Window)

滑动窗口限流策略会记录请求的时间戳,并动态地调整允许的请求数量。与固定窗口不同,滑动窗口允许请求量在时间范围内平滑分布,避免了固定窗口限流可能产生的突发请求问题。