API 网关是位于客户端与后端服务集之间的管理工具/平台。简单来说大致相当于一个反向代理,可以调用并返回结果。
价值
API网关并不是必须的,如果处于起步阶段的项目,单体应用还是最直接的,一层
Controller就可以解决问题,这个阶段引入过多的复杂性其实没有太大必要。
但是对于大型应用,特别是微服务化的场景下,API网关可以带来很多价值。
聚合和解耦
当用户需要同时访问多个接口的时候,网关可以聚合结果,节约流量。
网关由于路由规则等比较灵活,可以比较容易的切换网关后的路由,对于一些升级、迁移场景,可以降低影响。特别是业务迭代早期,服务之前的边界和模型不稳定,迭代是极为频繁的。
非业务功能
在实际的应用场景中,有很多功能是必要的,但是它不是业务功能,比如限流、降级、熔断等。网关可以用较低代价去实现通用能力,并提供一些通用的模块,比如认证接入等。
管理
网关统一了所有对外暴露的接口,也就有条件提供一个统一的管理工具,这样可以给API更统一的管理模型,统一生命周期。
评价
评价一款API网关主要看性能和功能,另外个人还觉得和已有生态的结合也是一个考虑点。如果是自建/自部署,还要考虑开源社区的活跃程度和二次开发的复杂度。
性能测试网上有很多,一般都是使用几台压测机进行施压,观察平均响应时间、吞吐量和响应时间分布。这样测试一般后端都是空接口(没有业务逻辑),无法模拟真实情况下的连接波动等的影响。
功能的话,大部分流行的API网关功能都是完备的,只要是活跃的,常见功能都有,这种情况下可以重点关注下监控系统的集成。
选型
API网关由于通用性比较强,相对来说选型也比较多。
常见的开源选择有Kong、Ambassador、Traefik、Tyk等。
部分开源网关也有商业版/商业支持,如果目前已经上云了,那其实完全可以使用云厂商的网关,差不多都是按流量+次数收费,也有买断式的专享实例,这种按照时长+流量收费。
对于云厂商来说,API网关属于最基本的功能了,都有提供,比如阿里云的API网关,腾讯的API网关等。云厂商的API网关和自身生态体系结合比较紧密,后端的选择很多,比如阿里云支持ECS、SLB、函数计算、Dataworks、DMS等,也有额外的插件可选,比如后端签名插件、JWT认证插件、后端路由等。
云厂商提供的API网关唯一问题就是厂商锁定比较重,和存储等还不太一样,相互间切换不容易。