API 网关,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。
开源的API网关,目前最主流的包括kong,spring cloud zuul,spring cloud gateway,zuul2等,下面来对比评测。
对比项 \ 名称 | kong | spring cloud zuul | zuul2 | spring cloud gateway |
介绍 | nginx(OpenResty)+lua,插件,高性能 | java + Servlet + groovy(热更新) | java+nio(netty),zuul全新的升级版 | java+Spring 5.0+Reactor非阻塞 |
开发方 | Kong(Mashape)公司 | Netflix | Netflix | Pivotal |
网站地址 | https://github.com/Netflix/zuul | |||
性能对比 | 非常高,是zuul的2~3倍 | 还可以 | 性能比zuul提高20%并且大幅提高支持的连接数 | 据说性能比zuul高50% |
开发容易度 | lua脚本语言,容易 | java+servlet,容易 | nio异步,比较难 | reactor异步,比较难 |
成熟时间 | 2016年 | 2014 | 2018 | 2018 |
发布版本数 | 52 | 51 | 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的成熟。