- 固定窗口算法(Fixed Window Algorithm):将时间划分为固定大小的窗口,统计窗口内的请求数量,当请求数量超过阈值时进行限流。缺点是存在突发流量的问题。
- 滑动窗口算法(Sliding Window Algorithm):将时间划分为固定大小的窗口,统计窗口内的请求数量,通过滑动窗口的方式实现动态的限流。可以解决固定窗口算法的突发流量问题。
- 令牌桶算法(Token Bucket Algorithm):系统以固定的速率往令牌桶中放入令牌,每个请求需要获取一个令牌才能被处理,当令牌桶中没有足够的令牌时,请求会被限流。可以平滑处理请求,但对于突发流量可能无法应对。
- 漏桶算法(Leaky Bucket Algorithm):系统以固定的速率处理请求,当请求到达时,如果桶中还有空闲容量,则将请求放入桶中进行处理,否则将请求丢弃或等待。可以平滑处理请求,但对于突发流量可能无法应对。
- 计数器算法(Counting Algorithm):简单地统计请求的数量,并与阈值进行比较,当请求数量超过阈值时进行限流。该算法简单且易于实现,但对于突发流量可能无法应对。
这些算法各有优缺点,适用于不同的场景。根据实际需求和系统特点,选择合适的限流算法可以提高系统的稳定性和可靠性。