今天周六,安仔带大家来学习一个 Kong,以及给你们聊聊做好网关限流控制的重要性。
背景
先跟大家介绍下背景,事情是这样的,那是上个月的某一天,本来上班开开心心,谁知九点半的时候突然微信报警消息如狂风暴雨般袭来,让人猝不及防,原来是线上的一个接口流量突然暴增,而且居高不下,导致部分业务瘫痪,无法使用。
按照正常的用户量,平常的上班时间不会出现如此大的流量,而且还是在这么短的时间里,对比了下往常的数据,发现访问量飙升几十倍,为了不影响正常的用户,紧急联系运维扩容服务器,稳定业务。然后紧急分析问题,一开始以为是客户端的 APP 升级出现了问题,导致死循环了,但是问了下终端负责人,并没有发布新的 APK。然后事情都这里想必大家都猜到原因了,没错,那就是我们被 DDoS 了。
关于什么是 DDoS,我想大家都是有经验的开发人员,应该都知道,不知道的朋友可以在私信回复【安全】,获取一份 Web 安全相关电子书。
那么遇到这种情况,我们除了扩容服务器还有哪些解决方案呢?
知乎上有一篇问答,里面提到有下面几种方式
- 高防服务器
- 黑名单
- DDoS 清洗
- CDN 加速
这几种方案都有相应的特性,不过阿粉我在这里想给大家介绍另一种方案,简单,快速,但是对用户不友好,那就是采用网关限流。当然不同的业务有不同的特性,需要选择适合自己的方式,如果是金融证券企业的话还是请第三方专业的公司去做防护。
API 网关 Kong介绍
Next-Generation API Platform for Multi-Cloud and Hybrid Organizations. Connect all your microservices and APIs with the industry’s most performant, scalable and flexible API platform.
在 Kong 的官网赫然的写了上面的一句话,翻译起来有点别扭,我就不直译了,大家自己看英文更能理解。简单来说 Kong 就是下一代的 API 网关,用起来就对了。
Kong 是在客户端和服务端之间的 API 网关,Kong 作为网关可以统一转发请求,并且因为 Kong 是基于 Nginx 的,所以本身支持水平扩展;另外 Kong 可以对请求做统一的限流,认证和授权管理,而且这些功能都是基于插件式,即插即用,根据自身业务的特性,可以选择合适的插件来控制相关业务。如果已有的插件不适合,还可以自己开发相应的插件,不过插件的开发是基于 lua 的。
安装步骤安装数据库
因为 Kong 的底层存储是采用 PostgreSQL 9.5+ 或者 Cassandra 3.x.x 的,所以我们在安装 Kong 之前需要先安装数据库,阿粉这里采用的是 PostgreSQL 9.5,并且服务器是 CentOS7 的版本。
1. 使用 yum 安装依次执行如下命令
~$ yum install https:/ /download.post