1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #977 from saowu/patch-2

Update limit-request.md
This commit is contained in:
SnailClimb 2020-11-02 19:33:33 +08:00 committed by GitHub
commit 16fce1f432
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,7 +6,7 @@
#### 固定窗口计数器算法
规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现给定一个变量counter来记录处理的请求数量当1分钟之内处理一个请求之后counter+11分钟之内的如果counter=100的话后续的请求就会被全部拒绝。等到 1分钟结束后将counter回归成0重新开始计数ps只要过了一个周期就讲counter回归成0
该算法规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现给定一个变量counter来记录处理的请求数量当1分钟之内处理一个请求之后counter+11分钟之内的如果counter=100的话后续的请求就会被全部拒绝。等到 1分钟结束后将counter回归成0重新开始计数ps只要过了一个周期就讲counter回归成0
这种限流算法无法保证限流速率因而无法保证突然激增的流量。比如我们限制一个接口一分钟只能访问10次的话前半分钟一个请求没有接收后半分钟接收了10个请求。
@ -14,7 +14,7 @@
#### 滑动窗口计数器算法
算的上是固定窗口计数器算法的升级版。滑动窗口计数器算法相比于固定窗口计数器算法的优化在于:它把时间以一定比例分片。例如我们的口限流每分钟处理60个请求我们可以把 1 分钟分为60个窗口。每隔1秒移动一次每个窗口一秒只能处理 不大于 60(请求数)/60窗口数 的请求, 如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求。
该算法算的上是固定窗口计数器算法的升级版。滑动窗口计数器算法相比于固定窗口计数器算法的优化在于:它把时间以一定比例分片。例如我们的口限流每分钟处理60个请求我们可以把 1 分钟分为60个窗口。每隔1秒移动一次每个窗口一秒只能处理 不大于 60(请求数)/60窗口数 的请求, 如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求。
很显然:当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。
@ -32,4 +32,4 @@
![令牌桶算法](https://static001.infoq.cn/resource/image/ec/93/eca0e5eaa35dac938c673fecf2ec9a93.png)
###
###