Appearance
全局访问限流
全局限流与单用户限流互为补充,都是为了实现限流削峰,保障服务的稳定。如果在规定的时间内接收了一个用户大量的请求,令牌耗尽,将返回响应状态代码 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,