File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed
docs/system-design/high-availability Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change 6
6
7
7
#### 固定窗口计数器算法
8
8
9
- 该算法规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现:给定一个变量counter来记录处理的请求数量,当1分钟之内处理一个请求之后counter+1,1分钟之内的如果counter=100的话 ,后续的请求就会被全部拒绝。等到 1分钟结束后,将counter回归成0,重新开始计数(ps:只要过了一个周期就讲counter回归成0 )。
9
+ 该算法规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现:给定一个变量counter来记录处理的请求数量,当1分钟之内处理一个请求之后counter+1,1分钟之内的如果counter=10的话 ,后续的请求就会被全部拒绝。等到 1分钟结束后,将counter回归成0,重新开始计数(ps:只要过了一个周期就将counter回归成0 )。
10
10
11
11
这种限流算法无法保证限流速率,因而无法保证突然激增的流量。比如我们限制一个接口一分钟只能访问10次的话,前半分钟一个请求没有接收,后半分钟接收了10个请求。
12
12
22
22
23
23
#### 漏桶算法
24
24
25
- 我们可以把发请求的动作比作成注水到桶中,我们处理请求的过程可以比喻为 ** 漏桶漏水** 。我们往桶中以任意速率流入水,以一定速率流出水。当水超过桶流量则丢弃 ,因为桶容量是不变的,保证了整体的速率。
25
+ 我们可以把发请求的动作比作成注水到桶中,我们处理请求的过程可以比喻为 ** 漏桶漏水** 。我们往桶中以任意速率流入水,以一定速率流出水。当水超过桶容量则丢弃 ,因为桶容量是不变的,保证了整体的速率。
26
26
27
27
如果想要实现这个算法的话也很简单,准备一个队列用来保存请求,然后我们定期从队列中拿请求来执行就好了。
28
28
29
29
![ 漏桶算法] ( https://static001.infoq.cn/resource/image/75/03/75938d1010138ce66e38c6ed0392f103.png )
30
30
31
31
#### 令牌桶算法
32
32
33
- 令牌桶算法也比较简单。和漏桶算法算法一样 ,我们的主角还是桶(这限流算法和桶过不去啊)。不过现在桶里装的是令牌了,请求在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删除)。
33
+ 令牌桶算法也比较简单。和漏桶算法一样 ,我们的主角还是桶(这限流算法和桶过不去啊)。不过现在桶里装的是令牌了,请求在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删除)。
34
34
35
35
我们根据限流大小,按照一定的速率往桶里添加令牌即可!
36
36
You can’t perform that action at this time.
0 commit comments