序言
为了在多项目管理过程中,让部分统一业务集中管理,比如鉴权、限流、权限、熔断、协议转换、错误码统一、缓存、日志、监控、告警等。
在此情况下我们需要寻找统一的项目入口,去设置这些业务,这个统一入口在此便是本系列文章介绍的kong网关。
这篇文章将主要介绍如何使用kong来实现限流。
写这篇文章时因为kong还是0.13.1版本,尴尬~~本篇将以这个版本为主介绍。
kong插件介绍
插件提供了扩展Kong网关的使用,我们可以向网关添加新功能。可以将插件配置为在各种上下文中运行,从特定路由到所有服务。插件可以为我们提供便捷服务,例如身份验证,速率限制或对代理请求的转换。
限流
使用的插件名:
rate-limiting
或rate-limiting-advanced
相比较旧版的
rate-limiting
, 新版本rate-limiting-advanced
在支持http https
的基础上额外支持grpc grpcs
限制策略
此为可选配置
config.policy
,三个值:
- local:计数器存储在本地内存中的节点上。
- cluster:计数器存储在kong的数据存储区中【我此处为PostgreSQL】,并在节点之间共享。(默认值)
- redis:计数器存储在Redis服务器上并在节点之间共享。
应用范围
此插件可以添加到服务、路由、消费者,如果没有指定任何一个,将会时全局插件,在每一个请求都会生效。
源代码
<?php
/**
* 注册服务
* @author: 飘逸的罗伯特
*/
//api注册
$api_data = [
'name' => 'goods8',
'uris' => '/goods8',
'methods' => 'GET',
'upstream_url' => 'http://hz12.cn/goods8'
];
var_dump(http_request('http://hz12.cn:8001/apis', $api_data));
//限流设置及注册
$limit = [
'name' => 'rate-limiting',
'config.second' => 2, //每秒钟允许2次
'config.minute' => 3, //每分钟允许3次
//config.hour
//config.day
//config.month
//config.year
];
var_dump(http_request('http://hz12.cn:8001/apis/goods8/plugins', $limit));
/**
* 发送post请求
* @param [string] $url 请求地址
* @param [array] $postdata post参数
* @return [ar] [description]
*/
function http_request($url, $postdata=[]){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
$data = curl_exec($curl);
curl_close($curl);
return $data;
}
运行示例
- 注册限流插件
- 运行注册的api
- 继续快速刷新