简述
前面介绍了kong的基本使用以及相关原理,那么接下来,我们需要对kong的性能做一个简单的了解。
性能压测
测试环境
机器类别及IP地址 | 硬件配置 | 操作系统 | 软件配置 | 网络环境 |
---|---|---|---|---|
kong服务 | 1核2G/2核2G/2核4G/4核2G/4核4G | Alpine Linux 3.13 | kong:2.5.0 | 阿里云ack环境 |
测试机 | CPU:4CPU8G 带宽:1M 资源组:1台4CPU8G,1台2CPU4G VUM:100w | Euler OS系统 | v1.19.10-r0 | 华为云 云性能测试服务CPTS |
测试思路
- 压测 使用kong代理;
- 压测 使用kong代理并使用插件(file-log)的场景;
- 压nginx与kong的区别(其他变量一样);
- 压规格,看内存影响还是cpu影响,以及最后得出一个软件瓶颈的最佳规格(其他变量一样);
- 压并发数,看是否有影响,以及错误率,qps变化(其他变量一样);
- 压引入lua业务与没引入lua业务的场景,看业务对其影响大不大(其他变量一样);
测试结果
测试报告量巨大,为了看起来明了,这里只写了结论(数据量实在太多了,而且markdown对表格的支持不太好,显示效果也不好,这里仅放置模板)
模板
此处RPS可以理解为QPS;
场景分别为:
1核2G1M带宽1副本
1核2G1M带宽2副本
1核2G2M带宽1副本
1核4G1M带宽1副本
2核2G1M带宽1副本
2核4G1M带宽1副本
2核4G1M带宽2副本
…
等等
以下是表格模板:
结论
-
kong架构+lua业务+file-log插件:qps最高的配置规格为4核2G,qps大约在 9000左右波动;
-
kong架构代理:qps最高的配置规格为4核2G**,qps大约在1.2w左右波动;
-
nginx架构+lua业务+nginx反向代理:qps最高的配置规格为4核2G,qps大约在 1.3w左右波动;
这里为什么加了一个nginx反向代理的条件,是因为你使用kong的时候,kong的内部实际上是对你的业务做了一个反向代理,所以为了保证变量一致,采用了nginx代理;
-
nginx架构+lua业务:qps最高的配置规格为4核2G,qps大约在 3w左右波动;
-
两种框架压测时,qps跟cpu核数的提升成正比,与内存的影响较小。
场景
由以上结论可以得出:
-
如果直接访问 nginx(不存在nginx代理),4核2G情况下,qps是3w,直接访问kong(直接在nginx_kong.lua配置server访问),qps也是3w,两者相差不大,可以说几乎等同。
但是如果按照这种方式使用kong的话,其实是违背了kong的初衷,这样的话需要你修改一些源码才能保证kong的生命周期,插件正常使用,并且还会带来额外的风险(比如kong已有的功能部分失效);
-
而使用代理的方式,也就是说代理接口的时候,kong 4核2G情况下qps只有1.2w(使用nginx做代理后,qps下降也会特别严重,比kong情况稍微好一些,但相差不大),再加一个插件时,qps又会更低。
这个结论是大量数据压测支撑出来的(购买的华为云 cpts服务,非本地jmeter压测,故可以排除因本地机器性能不足而导致的结果不准确),不是自己凭空捏造,因为数据量太大,粘贴出来的话,文章的可读性会变的很差;
所以由以上结论可以总结出以下场景:
- 如果仅仅想做个接口提供给对方,中间没有什么代理,直来直去没有其他功能的需求,并且又要求并发特别高,我建议你直接nginx;
- 如果你需要做接口代理,但又不需要什么权限啦,限流啦等功能,我还是建议你nginx;
- 如果你需要接口代理,并且需要开发权限功能,限流,日志等功能时,我建议你上kong,因为这些功能kong是做好的,我们可以直接拿来使用;
其实可以总结为一句话是,你需要代理接口,但是你又不想开发类似权限,限流,插件等功能时,而且也想动态配置路由直接生效,不需要重启服务时,并且你还想要一个可视化的页面配置时(要求不能在多啦!),就用kong,反之,nginx;