php实战kong做微服务架构四(插件之网关限流)

php实战kong做微服务架构四(插件之网关限流)

序言

为了在多项目管理过程中,让部分统一业务集中管理,比如鉴权、限流、权限、熔断、协议转换、错误码统一、缓存、日志、监控、告警等。

在此情况下我们需要寻找统一的项目入口,去设置这些业务,这个统一入口在此便是本系列文章介绍的kong网关。

这篇文章将主要介绍如何使用kong来实现限流。

写这篇文章时因为kong还是0.13.1版本,尴尬~~本篇将以这个版本为主介绍。

kong插件介绍

插件提供了扩展Kong网关的使用,我们可以向网关添加新功能。可以将插件配置为在各种上下文中运行,从特定路由到所有服务。插件可以为我们提供便捷服务,例如身份验证,速率限制或对代理请求的转换。

限流

使用的插件名:rate-limitingrate-limiting-advanced

相比较旧版的rate-limiting, 新版本rate-limiting-advanced在支持http https的基础上额外支持 grpc grpcs

限制策略

此为可选配置 config.policy,三个值:

  1. local:计数器存储在本地内存中的节点上。
  2. cluster:计数器存储在kong的数据存储区中【我此处为PostgreSQL】,并在节点之间共享。(默认值)
  3. 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;
}

运行示例

  1. 注册限流插件
    在这里插入图片描述
  2. 运行注册的api
    在这里插入图片描述
  3. 继续快速刷新
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45111820/article/details/113999395
今日推荐