API 网关的功能用途及实现方式
1. API 网关诞生背景
前言
API 经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API 成为企业连接业务的核心载体, 并产生巨大的盈利空间。快速增长的 API 规模以及调用量,使得企业 IT 在架构上、模式上面临着更多的挑战。
API 是什么
API 网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API 网关封装了系统内部架构,为每个客户端提供一个定制的 API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API 网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供 REST/HTTP 的访问 API。服务端通过 API-GW 注册和管理服务。
1. API 开放数量不断增加
毋庸置疑,随着企业的数据化进展,微服务改造,不同领域的 API 层出不穷,早在 2014 年 ProgrammableWeb 便预测 API 矢量可达到 100,000 到 200,000,并会不断增长。API 开发数量的增加给边缘系统带来机会,也随即演变了 API 网关的出现。大规模的 API 管理系统成为核心的发展趋势。
2. API 服务平台多样化
最初的 API 主要针对不同单体应用的网络单元之间信息交互,现已演变到服务间快速通讯。随着人工智能 EI,IOT 的不断演进,依赖 API 的平台不断更新,如 Web,Mobile,终端等,未来将会出现更多的服务体系。包括不限于:
- 浏览器
- IOS
- Android
- macOS
- Windows
- Linux
- IOT
- 其他移动端
- 小程序
- 终端设备(如智慧零售、工业的终端等)
- ......
3. 逐步替换原有企业的服务模式,API 即商品
卖计算,卖软件,卖能力,最终的企业的销售模式会逐步转变,能力变现,释放数据价值,依托不同的 API 管理平台创造新的盈利。
API 网关诞生背景
随着 API 的整体趋势发展,每个时期都面临着不同的挑战,架构也随之变化,具体如下图:
- 1960-1980:阿帕网、ATTP、TCP
- 1980-1990:点对点
- 1990-2000:消息中间件、ESB(企业服务总线,Enterprise service bus),SOA(面向服务的架构)
- 2000 至今:Integration as a service,RESTful services,API 管理,云上编排
从最原始的“传输协议通讯” -> “简单的接口集成” -> “消息中间件” -> “标准 REST”, 可以看到 API 的发展更趋向于简洁, 集成,规范化, 这也促使更多的系统边界组件不断涌现,在承载了万亿级的 API 经济的背景下, API 网关应运而生。
如果没有合适的 API 管理工具, API 经济不可能顺利开展。 同时提出了对于 API 管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)
如果没有合适的 API 管理工具, API 经济不可能顺利开展。 同时提出了对于 API 管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)
-- Magic Quadrant for Full Life Cycle API Management,Gartner, 2016-10-27
2. API 网关核心功能
- API 生命周期管理
- planning(规划)
- design(设计)
- implementation(实施)
- publication(发布)
- operation(运维)
- consumption(消费)
- maintenance(维护)
- retirement(下架)
- API 网关基础功能
- 认证
- 鉴权
- 服务发现和集成
- 负载均衡
- 日志
- 链路追踪
- 监控
- 重试
- 限流
- QoS
- 熔断器
- 映射
- 缓存
- Header、query 字符串 等 转义
- API 文档
- API 测试
- SDK 生成
- API 多版本、多环境管理
- 插件
- API 集中式 metrics、logging、tracing 管理
- 安全
- HTTPS
- IP 黑白名单
- 高可用
- 可热重启
- 高性能
- 可扩展性
- 无状态横向扩展
3. API 网关的用途
OpenAPI
企业需要将自身数据、能力等作为开发平台向外开放,通常会以 rest 的方式向外提供。最好的例子就是淘宝开放平台、腾讯公司的 QQ 开发平台、微信开放平台。
Open API 开放平台必然涉及到客户应用的接入、API 权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是 API 网关可以发挥作用的时候。
微服务网关
在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关,微服务网关处理了负载均衡,缓存,路由,访问控制,服务代理,监控,日志等。
API 网关在微服务架构中正是以微服务网关的身份存在。
API 中台
上述的微服务架构对企业来说有可能实施上是困难的,企业有很多遗留系统,要全部抽取为微服务改动太大,对企业来说成本太高。
但是由于不同系统间存在大量的 API 服务互相调用,因此需要对系统间服务调用进行管理,清晰地看到各系统调用关系,对系统间调用进行监控等。
API 网关可以解决这些问题,我们可以认为如果没有大规模的实施微服务架构,那么对企业来说微服务网关就是企业的 API 中台。
4. API 网关的价值
通过 API 网关,可以封装后端各种服务,以 API 的形式,提供给各方使用。API 网关产品的优势总结如下:
- API 全生命周期管理:协助开发者轻松完成 API 的创建、维护、发布、监控等整个生命周期的管理。
- 丰富的服务治理能力:支持 API 限流,参数校验,元数据维护,SDK 生成,批量操作等能力,协助开发者高效管理服务。
- 可观察性:通过 API 网关,支持对调用次数,前后端错误次数等丰富监控指标的可视和告警能力;通过全面的监控告警,保证用户服务的可用性。
- 可运营性:支持 企业 OpenAPI 定价,账单等运营功能
- 服务安全:通过接入多种认证方式,确保用户 API 的访问安全性;通过严格的流量控制,避免用户服务的过载。
- 前后端业务解耦
- 多类型后端打通
5. API 网关的实现方式
主流 API 网关
- Istio(以及最新出的 Envoy Gateway)
- Linkerd
- NGINX 及其商业版
- KONG
- Traefik
- APISIX
- RedHat 3scale
- Netflix Zuul
- Spring Cloud Gateway
- Amazon API Gateway
- 阿里云 API 网关(其最新开源的 Higress 是基于 Envoy Gateway 的)
- 腾讯云 API 网关
- MuleSoft
OpenAPI
对于定位 OpenAPI 平台的 API 网关,目前只能选择专业的 API 网关作为解决方案。
微服务网关
对于定位为「微服务网关」的 API 网关,业务有多种实现方式:
Service Mesh
典型的如 Istio,架构如下:
通用反向代理
基于 NGINX 或 NGINX + LUA + OpenResty 的实现。典型如:
- Nginx 及其 商业版
- NGINX Controller(API 管理、App 交付)
- NGINX Plus(API Gateway,负载均衡,仪表板)
- NGINX Ingress Controller
- NGINX Service Mesh
- KONG
- Traefik
- 3scale
API 网关框架
- Netflix Zuul,zuul 是 spring cloud 的一个推荐组件
- Spring Cloud Gateway
公有云解决方案
其实公有云的解决方案也是基于以上方案的定制化开发并产品化后发布到公有云上,主流的也是基于:NGINX + LUA + OpenResty, 或者最新的可能是基于 Istio Gateway 的实现
其他方案
- 基于 Netty、非阻塞 IO 模型。
- 基于 Node.js 的方案。这种方案是应用了 Node.js 的非阻塞的特性。
- 基于 Java,如 MuleSoft