API网关选型调研
需求
- 稳定性、社区活跃: 一个开源工具的选型,性能是次要的,真正首要的是工具稳定可靠且开源社区持续维护
- 控制台简单友好
- 监控: 监控数据准实时,且清晰友好地展示指定时间区间的多维度数据(RPS、带宽流量、响应时间、HTTP状态码)
- 路由匹配规则: 事实上域名匹配+路径匹配+方法匹配已经基本够用,如果需要灰度发布就再需要个Header匹配,其他再多再精细的匹配规则也仅仅是锦上添花
- 鉴权认证: 绑定在路由维度上的鉴权认证,常用的鉴权方式有
HMAC
、Basic
,另外需要对每个认证用户做权限控制,未授权的路由禁止调用 - 配置热更新
- 限流: 支持多个维度的限流方案,例如:调用方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 所有内置变量做为路由的条件 | |
鉴权认证 | 支持HMAC 、JWT 、Basic 等认证,支持route/service维度的权限控制 |
HMAC 、JWT 、Basic 等,但权限控制需要额外的服务来支持 |
|
配置热更新 | 支持 | 支持 | |
限流 | IP/认证用户等多维度限流 | IP/认证用户等多维度限流 | |
ip黑白名单 | 支持 | 支持 | |
负载均衡 | 支持,且提供主动/被动健康检查 | 支持,且提供主动/被动健康检查 | |
高性能 | 单核QPS1700(开启限流和 prometheus 插件) | 单核QPS18000(开启限流和 prometheus 插件) | |
自定义插件 | 支持(lua),插件变动需要重启 | 支持(lua),插件变动支持热更新 |
进一步筛选
Kong与APISIX无论是底层原理还是功能实现都非常相近,且以上列出的重要功能点都基本实现了。但实际体验后个人感觉KONG上手更快易于理解,APISIX虽然号称性能更高,但对于我们的应用场景来说实际上单核QPS1700已经完全够用。
另外非常重要的路由授权的实现,APISIX需要额外的服务wolf来实现,且两者存在割裂感,远远不如Kong的使用友好。
结论
如果对性能有极致的要求则使用APISIX,否则个人建议使用Kong。无论是上手易用性还是服务实现完整程度上,个人感觉Kong都略胜与APISIX。