关键字:网关,Zuul,Gateway,Spring Cloud, ServiceComb,Edge Service性能测试,微服务
作者 | 李昂
导读
本文对几种流行的 API 网关以关键指标 RPS 为依据,利用 wrk 做出性能测评并且给出结论。本文所有使用的软件、命令、以及代码均在文中注明,以便读者搭建本地环境进行测试。注意性能测试的数据在不同的运行环境中差别较大,但总体上来说各项数据会成比例变化,本文的测试过程和结论可以较准确地反应出各 API 网关之间的性能差异。
背景知识介绍
API 网关
近些年来,在云时代的背景下,为了适应互联网和大数据的高速发展,随着微服务架构的持续火热,对 API 网关的诉求越来越强烈,API 网关的产品也层出不穷。除了传统的 Zuul 和 SpringCloud Gateway, 还诞生了很多优秀的网关,本文选取了Edge Service 作为比较对象与传统的网关进行了 API 网关的性能测评。
究竟是久经沙场的老牌网关更经得起考验,还是新兴的网关性能更优?本文将给出详细的测评过程和结果。
Netflix Zuul
Zuul 在这三个网关中是最早诞生的,其 github repo 早在 2013 年之前就已经存在,同年开始进入大众视野,崭露头角。虽然 Zuul 诞生较早,也占据着不小的市场份额,但由于 Zuul本身是基于阻塞io开发的,在如今的网关市场上,相较其他的产品,性能上稍显马力不足。
Spring Cloud Gateway
Gateway 建立在 Spring Framework 5,Project Reactor 和 Spring Boot 2 上,不同于 Zuul 的阻塞 IO,Gateway使用的是非阻塞 IO,相较 Zuul 具备更好的内核性能;同时与Spring紧密集成,对于开发者而言,成为了一个整合方便,使用方便,性能高的产品,有着良好的生态市场作为依托。
其实,Spring Cloud 最开始是整合 Zuul 作为网关解决方案,但是随着时间的推移,BIO 的局限性不断暴露,捉襟见肘,Spring 开始考虑另寻他路。自此,Spring Cloud Gateway 网关亮相面世。而这一产品也确实经受住了时间的考验,成为了业界最佳的网关选择之一。
ServiceComb EdgeService
EdgeService 来自于 Apache 开源项目 apache/servicecomb-java-chassis,其主项目 Apache ServiceComb 是由华为公司于2017年捐献给 Apache孵化,并于次年 10 月 24 日宣布毕业,也是业界首个在Apache 孵化毕业的顶级开源微服务项目。
在如今的云原生时代背景下, EdgService 能很好的适应发展变革与鹿场角逐,由于自带微服务场景的基因,所以 EdgeService 天生适用于在微服务场景,并且和 ServiceComb-Java-Chassis 完美集成,更好的融入微服务项目,具体信息可以参考 EdgeService文档。
性能测试
环境准备:
- 硬件环境:三台机器,分别运行服务端程序,网关程序和压测程序
- CPU: 4vCPU Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
- 内存:8GB
- 软件环境:
- wrk
工程文件:
本文涉及到的所有代码可从 https://github.com/AngLi2/api-gateway-benchmark 获取:
其中:
- origin:为本次性能测试的被调用服务文件,测试中在 192.168.0.5:8080 端口启动
- zuul: 为 zuul 网关程序,将请求分发到 origin,测试中在 192.168.0.152:8081 端口启动
- odependency依赖的 spring-cloud-starter-zuul 版本为 1.4.7.RELEASE,对应的 Zuul 版本为 1.3.1
- gateway: 为 gateway 网关程序,将请求分发到 origin,测试中在 192.168.0.152:8082