Skip to content

全局访问限流

全局限流与单用户限流互为补充,都是为了实现限流削峰,保障服务的稳定。如果在规定的时间内接收了一个用户大量的请求,令牌耗尽,将返回响应状态代码 429 (这意味着过多的请求)。

说明

DZ-SHOP默认不会启用全局限流,你可以根据以下说明轻松配置好全局访问限流。全局限流采用令牌桶算法,你可以点击这里了解令牌桶的原理。

安装并配置Redis

全局限流根据QPS(Queries Per Second,每秒查询率)来进行限流。DZ-SHOP的全局限流需要Redis的支持,因此在启用全局限流前,必须已经安装好了Redis。

你需要在config/common/main-local.php中的components中添加redis节点,例如:

php
'components' => [
    /** ------ redis配置 ------ **/
    'redis' => [
        'class' => 'yii\redis\Connection',
        'hostname' => 'localhost',
        'port' => 6379,
        'database' => 0,
    ],
]

可以点击这里了解yii2的redis配置。

执行令牌桶添加器

通过控制台执行令牌桶添加器

在控制台进入执行如下命令:

php
//max_num:令牌最大数量
//add_num:每秒添加的令牌数量
php yii common/token-bucket/console-add --max_num=600 --add_num=100

通过定时任务执行令牌桶添加器

在console/schedule.php添加如下代码:

php
//max_num:令牌最大数量
//add_num:每秒添加的令牌数量
$schedule->command('common/token-bucket/cron-add --max_num=600 --add_num=100')->everyMinute()->sendOutputTo($path . 'token_bucket.log');

通过supervisor执行令牌桶添加器(推荐)

supervisor 是Linux的进程监视器。它会自动启动您的控制台进程。如果使用“宝塔”,可以在“宝塔”内直接安装supervisor。也可以直接使用如下命令安装supervisor:

bash
sudo apt-get install supervisor

supervisor 配置文件通常可用 /etc/supervisor/conf.d。 你可以创建任意数量的配置文件。

配置示例:

bash
[program:dz-shop-token-bucket]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /你的部署文件夹/yii common/token-bucket/console-add --max_num=600 --add_num=100
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/my_project/log/dz-token-bucket.log

有关 supervisor 配置和使用的更多信息,请参阅文档

启用全局限流

需要在config/frontendApi/params-local.php中更改user.tokenBucketEnabled的值为true,这时全局限流将开始执行:

php
'user.tokenBucketEnabled' => true,

广州大舟信息科技 版权所有