API网关选型调研

需求

  • 稳定性、社区活跃: 一个开源工具的选型,性能是次要的,真正首要的是工具稳定可靠且开源社区持续维护
  • 控制台简单友好
  • 监控: 监控数据准实时,且清晰友好地展示指定时间区间的多维度数据(RPS、带宽流量、响应时间、HTTP状态码)
  • 路由匹配规则: 事实上域名匹配+路径匹配+方法匹配已经基本够用,如果需要灰度发布就再需要个Header匹配,其他再多再精细的匹配规则也仅仅是锦上添花
  • 鉴权认证: 绑定在路由维度上的鉴权认证,常用的鉴权方式有HMACBasic,另外需要对每个认证用户做权限控制,未授权的路由禁止调用
  • 配置热更新
  • 限流: 支持多个维度的限流方案,例如:调用方IP限流、调用方认证用户限流、API维度限流等
  • ip黑白名单
  • 负载均衡
  • 高性能
  • 自定义插件

常见网关

  • Kong: 基于openresty+lua的开源网关,github上的star数遥遥领先
  • APISIX: 同样基于openresty+lua的开源网关,官方文档上的性能测试显示其单核性能远高于Kong
  • Tky: golang开源api网关

对比

功能点 Kong APISIX Tky
社区活跃 高,Github有28K的Star 高,Github有4K的Star 高,Github有6K的Star
控制台 开源版不自带控制台,但有第三方开源控制台支持(konga) 自带控制台,但实际使用并不友好 官方控制台非开源收费
监控 基于prometheus的数据监控,展示route/service/total维度的RPS/带宽/响应时长等指标 基于prometheus的数据监控,展示route/service/total维度的RPS/带宽/响应时长等指标
路由匹配规则 Host+Path+Method+Header 精细化的路由规则匹配,且支持使用Nginx 所有内置变量做为路由的条件
鉴权认证 支持HMACJWTBasic等认证,支持route/service维度的权限控制 HMACJWTBasic等,但权限控制需要额外的服务来支持
配置热更新 支持 支持
限流 IP/认证用户等多维度限流 IP/认证用户等多维度限流
ip黑白名单 支持 支持
负载均衡 支持,且提供主动/被动健康检查 支持,且提供主动/被动健康检查
高性能 单核QPS1700(开启限流和 prometheus 插件) 单核QPS18000(开启限流和 prometheus 插件)
自定义插件 支持(lua),插件变动需要重启 支持(lua),插件变动支持热更新

进一步筛选

Kong与APISIX无论是底层原理还是功能实现都非常相近,且以上列出的重要功能点都基本实现了。但实际体验后个人感觉KONG上手更快易于理解,APISIX虽然号称性能更高,但对于我们的应用场景来说实际上单核QPS1700已经完全够用。

另外非常重要的路由授权的实现,APISIX需要额外的服务wolf来实现,且两者存在割裂感,远远不如Kong的使用友好。

结论

如果对性能有极致的要求则使用APISIX,否则个人建议使用Kong。无论是上手易用性还是服务实现完整程度上,个人感觉Kong都略胜与APISIX。