8000 feat(algo): add limited alg · shgopher/408@2bef110 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2bef110

Browse files
committed
feat(algo): add limited alg
1 parent f6b9553 commit 2bef110

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

算法/算法/限流算法/README.md

Lines changed: 51 additions & 0 deletions
Original file li 8000 ne numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 限流算法
2+
3+
通常来说有三种比较常见
4+
5+
1. 计数器
6+
2. 滑动窗口
7+
3. 漏桶
8+
4. 令牌桶
9+
10+
## 计数器
11+
## 滑动窗口
12+
滑动窗口是计数器的一种改进方法
13+
14+
滑动窗口的思路是,在窗口内统计请求的数量,当窗口内请求数量达到阈值时,拒绝请求。
15+
16+
滑动窗口比基础的计数器方法改进的地方主要体现在以下几个方面:
17+
18+
1. 更加平滑地处理流量突变
19+
20+
基础的计数器方法在一个固定时间窗口内统计请求数量,如果在这个时间窗口内请求数量超过阈值,则会拒绝所有请求。这会导致在窗口切换时出现流量突变,例如在窗口刚开始时,请求可能会被立即拒绝,而在窗口结束时,即使请求数量已经下降,也可能仍然会被拒绝。
21+
22+
滑动窗口则将时间窗口划分为多个子窗口,并对每个子窗口进行独立统计。当某个子窗口内的请求数量超过阈值时,只会拒绝该子窗口内的请求,而不会影响其他子窗口。这样可以使流量更加平滑地处理突发流量。
23+
24+
2. 更好地适应流量变化
25+
26+
基础的计数器方法使用固定的时间窗口,无法适应流量的变化。例如,如果流量突然增加,则可能会导致请求被拒绝;而如果流量突然下降,则可能会导致资源浪费。
27+
28+
滑动窗口则可以通过调整窗口大小和步长来适应流量的变化。例如,当流量增加时,可以缩小窗口大小或减小步长,以提高系统的处理能力;当流量下降时,可以扩大窗口大小或增大步长,以节省资源。
29+
30+
3. 更加灵活的控制策略
31+
32+
基础的计数器方法只能根据请求数量来进行限流。
33+
34+
滑动窗口则可以根据不同的需求来制定更加灵活的控制策略。例如,可以根据请求的来源、类型、时间等因素来进行限流。
35+
36+
总结
37+
38+
滑动窗口是一种更加灵活、有效地限流方法,可以更好地处理流量突变、适应流量变化以及实现更加灵活的控制策略。
39+
40+
以下是一些滑动窗口算法的应用场景:
41+
42+
- Web API 限流
43+
- 服务端限流
44+
- 网络限流
45+
- 消息队列限流
46+
- 缓存限流
47+
48+
## 漏桶
49+
## 令牌桶
50+
## 漏桶和令牌桶比较
51+
如果拿漏桶和令牌桶来比较的话,漏桶是没有流量突变的,然而令牌桶因为要申请临牌的缘故所以它存在流量突变,或者卡死的状态

0 commit comments

Comments
 (0)
0