最新出炉!开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0
背景
云原生时代下,企业逐渐向云上迁移,越来越多的应用和服务都在进行容器化改造,服务之间的流量也开始爆发性的增长。为了能高效地管理这些规模庞大的 API,API 网关开始在技术领域大展身手。
用户除了需要 API 网关提供请求代理、熔断限流、审计监控等常规能力外,更多开始关注云原生兼容性、支撑场景的多样性,以及更好的性能及稳定性。在这样的背景下,以 Apache APISIX 和 Kong 等为代表的云原生 API 网关项目得到了越来越多开发者的青睐。
Apache APISIX 是一个云原生、高性能、可扩展的 API 网关,由深圳支流科技捐赠给 Apache 基金会,并于 2020 年 7 月从 Apache 孵化器毕业, 成为 Apache 软件基金会顶级项目。APISIX 基于 NGINX 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载,特别适合云原生架构下的 API 管理。
Kong 也是一款高可用、易扩展的开源 API 网关项目。通过提供代理、路由、负载均衡、身份验证等功能,在微服务与传统 API 领域提供网关层面的支持。
2022 年秋季,Kong 与 Apache APISIX 相继发布了最新的 3.0 版本。其中,Apache APISIX 3.0 重点在生态和架构层面进行了创新与迭代,致力让所有用户都能利用 APISIX 发挥更优秀的价值。Kong 3.0 则在新版本中更加侧重政府、金融业以及对安全合规更关注的大型企业,整体涉及在合规、易用性、功能与性能等方面进行了拓展。
作为开源微服务网关领域的优秀作品,在二者几乎同一时间发布 3.0 版本之际,我们对两个产品进行了一次性能测试,方便读者在选择和使用这两个网关产品时,对其最新版本的性能表现上有更加清晰的认知。
测试环境与方式
以下为本次进行测试的方式及环境数据,测试结果仅针对以下环境、机器及特定版本等。 同时本次测试使用 Docker 部署 APISIX 和 Kong 时,将使用 Docker 的 host 网络模式,避免网络原因影响测试结果。以下为其他相关测试配置信息。
请求拓扑图
以下是测试链路的拓扑图,压力测试工具使用 wrk2,上游服务使用 OpenResty。
相关服务器与软件信息
本次测试将在云服务器上进行,服务器配置为 Standard D8s v3 (8 核心虚拟 CPU,32 GiB 内存) 。所有测试相关组件均部署在这台服务器上,具体服务器环境信息如下表所示。
服务器环境信息 | |
名称 | 配置 |
os version | Debian 10 Buster |
ulimit -n | 65535 |
测试中所涉及到的软件版本信息如下表所示。
软件名称 | 版本信息 |
Docker | 20.10.18, build b40c2f6 |
APISIX | 3.0.0 |
Kong | 3.0.0 |
Upstream | OpenResty 1.21.4.1 |
Test tool | wrk2 |
部署细节
我们选择 wrk2 作为性能测试工具,选择 OpenResty 作为模拟上游。用 Docker 来部署 APISIX 与 Kong,并且都启用二者的声明式配置。
在测试时,只开启一个 1 个 worker 进程,这样测试结果会比较直观。正常来说,在实际使用中多个 worker 的负载能力相比 1 个 worker 来说,其性能接近线性增长。部署脚本与测试脚本可参考 https://github.com/api7/apisix-benchmark。
注意:在测试过程中,APISIX 关闭了
proxy-cache
和proxy-mirror
插件。这是因为这两个插件的启用将会影响 APISIX 4% 左右的性能(benchmark 相关文档中有提及),因此在本次测试中进行了关闭。
多场景测试与性能对比
场景一:1 条路由,不启用任何插件
场景一旨在测试纯代理场景。因此只设置 1 条路由,不启用任何插件,测试 APISIX 与 Kong 在该场景下的性能差异。
APISIX 配置如下:
routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin #END
Kong 配置如下:
_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello
性能对比
在该场景下共进行了 10 轮测试,QPS 如下折线图所示(以 QPS 指标来评价性能)。
从图中可以看到,在纯代理场景下,APISIX 3.0 的性能表现优于 Kong 3.0 之上。APISIX 3.0 的 10 轮 QPS 的平均值为 14104,Kong 3.0 的 10 轮 QPS 的平均值是 9857。相比之下,APISIX 3.0 的性能是 Kong 3.0 的 140%。
场景二:1 条路由 + 1 个插件(限流)
限流是网关产品的主要使用场景之一,因此在场景二中,我们配置了 1 条路由与 1 个限流插件来满足测试要求。
注意:该场景主要测试网关在限流场景下的性能,其中对限流插件的配置进行了较高的限制,避免触发实际的限流动作。
APISIX 配置如下:
routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin plugins: limit-count: count: 999999999 time_window: 60 rejected_code: 503 key: remote_addr #END
Kong 配置如下:
_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello plugins: - name: rate-limiting config: minute: 999999999 limit_by: ip policy: local
性能对比
依旧是进行了 10 轮测试,QPS 如下折线图所示(以 QPS 指标来评价性能)。
从上述对比图中可以看到,在启用「限制请求数量类」的插件后,APISIX 3.0 与 Kong 3.0 的 QPS 都下降明显,但是 Kong 3.0 的 QPS 下降幅度更大。APISIX 3.0 的 10 轮 QPS 的平均值是 9154,Kong 3.0 的 10 轮 QPS 的平均值是 4810,相比之下,APISIX 3.0 的性能是 Kong 3.0 的 190%。
场景三:1 条路由 + 2 个插件(限流+鉴权)
除上述提到的限流功能外,鉴权场景也是网关的主要使用场景之一。因此场景三将两个重要的功能合二为一,配置了 1 条路由的同时,绑定了限流插件和鉴权插件。该场景涵盖了限流与鉴权功能的同时,还在请求路径中实现了多个插件一起配合工作,覆盖了网关实际使用的经典场景。
APISIX 配置如下:
routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin plugins: key-auth: limit-count: count: 999999999 time_window: 60 rejected_code: 503 key: remote_addr consumers: - username: jack plugins: key-auth: key: user-key #END
Kong 配置如下:
_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello plugins: - name: rate-limiting config: minute: 999999999 limit_by: ip policy: local - name: key-auth config: key_names: - apikey consumers: - username: my-user keyauth_credentials: - key: my-key
性能对比
从上述结果折线图中可以看到,APISIX 3.0 在启用 limit-count
和 key-auth
插件后,10 轮 QPS 的平均值为 8933,相比只启用 limit-count
插件时的 QPS 平均值 9154,只有略微下降(约为 2.4%)。 而 Kong 3.0 在启用 rate-limiting
和 key-auth
插件后,10 轮 QPS 的平均值为 3977,相比只启用 rate-limiting
插件时 QPS 平均值 4810,下降非常明显(约为 17%)。 在该场景下对比 10 轮平均 QPS,APISIX 3.0 的性能是 Kong 3.0 的 220%。
场景四:5000 条路由
该方案使用脚本生成了 5000 条不重复的路由,测试时只命中其中一条路由。该场景主要是测试 APISIX 与 Kong 进行路由匹配时的性能。
性能对比
同样是进行 10 轮测试,结果如上述折线图所示。
从图中可以看到,在该场景下,APISIX 3.0 的 10 轮 QPS 的平均值为 13787,Kong 3.0 的 10 轮 QPS 的平均值为 9840。相比之下,APISIX 3.0 的性能是 Kong 3.0 的 140%,与场景一测试环境下的效果对比类似。
结论
从上述几组测试场景的结果来看:
- 当不在路由上绑定插件时,多路由匹配与单路由纯代理场景下,APISIX 3.0 的整体表现性能为 Kong 3.0 的 140% 左右;
- 当在路由上绑定插件时,APISIX 3.0 的性能为 Kong 3.0 的 200% 左右(有近一倍的性能提升)。
因此在不同场景的性能表现上,APISIX 3.0 整体性能相比 Kong 3.0 而言,仍然保持着较大的优势。如果你对上述两个网关的使用场景有更多使用上的心得,也欢迎随时交流。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Linux 6.2 已准备好引入计算加速器子系统
此前,关于 Linux 的计算加速器子系统(Accelerator Subsystem)一直处于争论状态,部分内核开发者应该针对该计算加速器开发新的子系统、部分开发者则认为它应当是 DRM 的子系统或其他子系统的一部分。 而在今年的 LPC 大会中,上游开发人员终于对如何处理加速器子系统达成了共识:鉴于各种人工智能加速器和 GPU 之间有很多共同点,这个新的 “accel” 内核计算加速器子系统将利用直接渲染管理器 (DRM) 的基础设施,但仍作为单独的子系统引入 Linux 内核。 来自 Intel / Habana Labs 的工程师 Oded Gabbay 一直在为这个新的“accel”子系统开发补丁,上周末发布了第四次迭代。在v4 公告邮件中,他确认 v4 补丁是 Linux 内核计算加速器子系统补丁的最后一个版本,已准备好在 Linux 6.2 版本中进行合并。 据外媒 Phoronix 报道,等 6.2 的合并窗口打开,Habana Labs AI 加速器驱动程序将从 char/misc 移动到新的加速区域。此外,还有许多其他候选开源加速器驱动程序正在开发中,例如英特尔 M...
- 下一篇
是什么影响了MySQL索引B+树的高度?
hello,大家好,我是张张,「架构精进之路」公号作者。 提到MySQL,想必大多后端同学都不会陌生,提到B+树,想必还是有很大部分都知道InnoDB引擎的索引实现,利用了B+树的数据结构。 那InnoDB 的一棵B+树可以存放多少行数据?它又有多高呢? 到底是哪些因素会对此造成影响呢,今天我们就来展开聊一下。 1InnoDB引擎数据存储 在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)的最小单元是块,一个块的大小是4k,在InnoDB存储引擎中,也有页(Page)的概念,默认每个页的大小为16K,也就是每次读取数据时都是读取4*4k的大小! 在MySQL中,InnoDB页的大小默认是16k,当然也可以通过参数设置: 2InnoDB引擎数据操作 接下来,为了让大家能更好地理解数据存储逻辑,我们来进行一个数据操作实例进行讲解。 假设我们现在有一个用户表,我们往里面写入数据。 这里需要注意的一点是,在某个页内插入新数据行时,为了减少数据的移动,通常是插入到当前行的后面或者是已删除行留下来的空间,所以在某一个页内的数据并不是完全有...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池