最近由于工作需要用到API网关做请求转发用,挑了目前人气较高的两款 Kong 和Goku 对比研究一下。
基本情况
Kong( https://github.com/niuguy/kong )基于Lua 构建,始创于2009年,目前在Github拥有26.9K Goku(https://github.com/eolinker/goku-api-gateway) 基于Go构建,始创于2017年,目前在Github 有2.1K获赞。
功能对比
以下功能列表整理自两个项目的github主页
功能 | Kong | Goku |
---|---|---|
云原生 | 多种方式支持 | 多种方式支持 |
K8s原生 | 支持原生绑定 | ?? |
负载均衡 | 支持dynamic 以及hash-based | 支持带权重round-robin |
服务发现 | 支持Consul等注册中心 | 支持Consul、Eureka 等注册中心 |
健康检查 | 主动以及被动检测,并支持死循环检测 | ?? |
路由设置 | 完整匹配+前缀+正则匹配 | 支持多种匹配规则,可设置访问策略 |
Serverless | 支持 | 支持 |
水平拓展 | 可水平拓展节点 | 可水平拓展节点 |
插件系统 | 基于Lua module | 基于go |
API管理 | 提供admin API。另有一个独立开源项目Konga可提供这些admin API的界面配置 | 提供图形化配置界面,但部分配置如路由可能需要购买企业版 |
日志系统 | 可记录全生命周期日志 | 可记录全生命周期以及控制台 |
服务编排 | 无。但理论上可以通过插件实现 | 通过管理界面提供丰富的服务编排选择,可通过添加step方式完成其次请求,链式访问多个第三方终端 |
数据转换 | 可通过插件+配置完成数据字段转换 | 通过界面配置方式完成数据转换,并支持数据支持字段的过滤、删除、移动、重命名、拆包和封包等 |
监控集成 | 支持Prometheus等 | 支持Prometheus等 |
运行性能
Kong 由于本质上是运行在Ngix的一个模块,其性能有Ngix加持保证。Goku 在其主页上对比号称比Kong 要更强一些,但有待于实际验证
上手难易度
通过实际本地(Mac)搭建,由于两个项目都提供了完整的docker image, 所以按照官方手册操作一两天时间即可本地运行demo, 如果需要拓展的话要根据对Lua 或者Go的熟悉程度。值得一提的是,Kong 近期也提供了适配Go的插件开发模块。
社区支持
作为老牌Gateway, Kong 有超过450K的社区注册开发者,同时其企业版拥有众多重量级的用户。相比Goku这方面会弱一些,影响力主要集中在国内,但是可见近两年发展之迅速,未来可期。有意思的是Kong-金刚,Goku-悟空,由于Goku是后来者,猜项目人员是有悟空挑战金刚的意思吧:)
简评
如果要从这俩个产品选型的话可能要考虑几个方面,如果是简单业务场景不需要过多业务开发,那么Goku提供的原生页面管理以及服务编排功能可谓非常方便。如果需要定制开发,那么要考虑一下团队对于Lua还是Go的接受程度以及社区的支持程度。如果是非技术型企业需要更完善的产品支持,Kong 和Goku 各提供收费产品提供包括全周期开发管理等功能。