Apache APISIX 和 Kong 都是开源的微服务 API 网关,那么在这两者之间,如何去做比较和选择呢?
这两个项目都有完善的文档和测试来覆盖,也有不少的生产用户在使用,所以不用去担心稳定性和它们的可持续发展,本文会从功能和性能这两个最直接和可验证的角度去做下对比。
从 API 网关核心功能点来看,两者均已覆盖:
功能 | Apache APISIX | Kong |
动态上游 | 支持 | 支持 |
动态路由 | 支持 | 支持 |
健康检查和熔断器 | 支持 | 支持 |
动态SSL证书 | 支持 | 支持 |
七层和四层代理 | 支持 | 支持 |
分布式追踪 | 支持 | 支持 |
自定义插件 | 支持 | 支持 |
REST API | 支持 | 支持 |
CLI | 支持 | 支持 |
更详细的比较:
功能 | Apache APISIX | Kong |
项目归属 | Apache 软件基金会 | Kong Inc. |
技术架构 | Nginx + etcd | Nginx + postgres |
交流渠道 | 微信群、QQ群、邮件列表、Github、meetup | Github、论坛、freenode |
单核 QPS (开启限流和prometheus插件) | 18000 | 1700 |
平均延迟 | 0.2 毫秒 | 2 毫秒 |
配置生效时间 | 事件通知,低于 1 毫秒更新 | 定期轮询,5 秒 |
支持 Dubbo 代理 | 是 | 否 |
配置回滚 | 是 | 否 |
支持生命周期的路由 | 是 | 否 |
插件热更新 | 是 | 否 |
用户自定义:负载均衡算法、路由 | 是 | 否 |
resty <--> gRPC 转码 | 是 | 否 |
支持 Tengine 作为运行时 | 是 | 否 |
MQTT 协议支持 | 是 | 否 |
自带控制台 | 是 | 否 |
对接外部身份认证服务 | 是 | 否 |
配置中心高可用(HA) | 是 | 否 |
指定时间窗口的限速 | 是 | 否 |
支持任何 Nginx 变量做路由条件 | 是 | 否 |
压测环境
测试平台:阿里云 ecs.hfg5.2xlarge 8 vCPU 32 GiB。
测试方法:分别开启指定 worker 数量(单核、多核),然后用 wrk 加大压力测试。这里要把 API 网关资源打满(主要是 CPU)。而压测客户端、上游服务都正常服务,不是瓶颈。
开启 prometheus 和 limit-count 两个插件。
测试版本:Apache APISIX 0.9 和 Kong 1.4.3
测试脚本:https://gist.github.com/membphis/137db97a4bf64d3653aa42f3e016bd01
压测场景 1:只开启一个 worker
详细压测结果(大家可以这里的脚本,自己来重现性能测试的结果):https://gist.github.com/membphis/137db97a4bf64d3653aa42f3e016bd01#gistcomment-3137123
Apache APISIX 在不开启插件,只做反向代理的情况下,是 Kong QPS 的 1 倍;在开启限流和prometheus这两个插件后,性能是 Kong 的 10 倍。
测试场景 | Apache APISIX QPS | Kong QPS |
不开启插件 | 29968 | 14106 |
开启限流和prometheus插件 | 25134 | 2546 |
Apache APISIX 在不开启插件,只做反向代理的情况下,是 Kong 延迟的一半;在开启限流和prometheus这两个插件后,延迟是 Kong 的十分之一。
测试场景 | Apache APISIX 延迟 | Kong 延迟 |
不开启插件 | 0.53 豪秒 | 1.17 毫秒 |
开启限流和prometheus插件 | 0.64 毫秒 | 6.31 毫秒 |
压测场景 2:开启 4 个 worker
详细压测结果:https://gist.github.com/membphis/137db97a4bf64d3653aa42f3e016bd01
测试场景 | Apache APISIX QPS | Kong QPS |
不开启插件 | 88369 | 43224 |
开启限流和prometheus插件 | 72767 | 7353 |
测试场景 | Apache APISIX 延迟 | KONG 延迟 |
不开启插件 | 0.176 毫秒 | 0.376 毫秒 |
开启限流和prometheus插件 | 0.220 毫秒 | 2.19 毫秒 |
写在最后
通过性能测试可以看到,在不开启插件的情况下,Apache APISIX 的性能(QPS 和延迟)是 Kong 的一倍,但开启了两个常用插件后,性能就是 Kong 的十倍了。
欢迎大家关注并点赞 Apache APISIX:https://github.com/apache/incubator-apisix ,一起努力把他打造成世界顶级项目。为方便国内同学交流,也可加入QQ交流群 552030619(Apache APISIX 社区)。