各种开源API网关、微服务网关对比测试
2018年08月09日


API 网关,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。


开源的API网关,目前最主流的包括kong,spring cloud zuul,spring cloud gateway,zuul2等,下面来对比评测。


对比项  \  名称kongspring cloud zuulzuul2spring cloud gateway
介绍nginx(OpenResty)+lua,插件,高性能java + Servlet + groovy(热更新)java+nio(netty),zuul全新的升级版java+Spring 5.0+Reactor非阻塞
开发方Kong(Mashape)公司NetflixNetflixPivotal
网站地址

https://github.com/Kong/kong

https://github.com/Netflix/zuul

https://github.com/Netflix/zuul

https://cloud.spring.io/spring-cloud-gateway

性能对比非常高,是zuul的2~3倍还可以性能比zuul提高20%并且大幅提高支持的连接数据说性能比zuul高50%
开发容易度lua脚本语言,容易java+servlet,容易nio异步,比较难reactor异步,比较难
成熟时间2016年201420182018
发布版本数5251
18

社区活跃度

(issue数量,star数量)

issues:2000

stars: 17.3k

结论:非常活跃

issues:300

stars: 5.5k

结论:还算活跃

issues:

stars: 


issues:

stars: 819

zuul和zuul2的分析对比:

http://ju.outofmemory.cn/entry/362416


个人比较倾向于  kong,很多人不选它的理由只有一个: 不会lua编程,二次开发不方便。实际上,这都不是问题。一方面,lua语言很简单,花一两天看看cookbook就会了;另一方面kong社区活跃,用户量大,无论是官方插件,还是第三方插件,都非常丰富,很少直接二次开发,即便有一点特殊需求,也可以找到类似的插件,改一改就行了,不精通lua,但是改一改应该没问题吧。


当然,我个人还是比较期待能有Java或者Go语言的更强大的、社区更活跃API网关面世,如果对网关的稳定性和性能要求不是很高,反而是对扩展性有较高要求,则目前建议临时用zuul,并等待zuul2和spring cloud gateway的成熟。