1 - 由来
应用编程接口(Application Programming Interface,简称:API),就是软件系统不同组成部分衔接的约定。
随着 API 的整体趋势发展, 架构也随之变化:从最原始的“传输协议通讯” -> “简单的接口集成” -> “消息中间件” -> “标准 REST”, API 的发展更趋向于简洁, 集成,规范化。
随着微服务的流行,采用微服务后,所有的服务都变成了一个个细小的API,与之带来了API管理的一些问题:
- 如何有效地管理服务API?
- API认证授权如何实现?
- 如何实现服务的负载均衡,熔断,灰度发布,限流流控?
在微服务的应用程序中,客户端和微服务之间的交互,也存在着挑战:
- 微服务提供的 API 粒度通常与客户端的需求不同,微服务一般提供细粒度的 API,也就是说客户端需要与多个服务进行交互。
- 不同的客户端需要不同的数据,不同类型客户端的网络性能不同。
- 服务的划分可能会随时间而变化,因此需要对客户端隐藏细节。
API 网关作为微服务整体架构的重要组件,针对性地解决了如何合理地治理服务API的问题。
抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能。
2 - 定义与特征
- 是一个服务器,是系统的唯一入口
- 封装了系统内部架构,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能
- 为每个客户端提供REST/HTTP方式访问的定制API
- 服务端通过API-Gateway注册和管理服务
- 承担身份验证、监控、负载均衡、缓存、流控、反向代理、健康检查等其它职责
更多的功能
- 对接Prometheus、Zipkin等统计、监控组件
- 对接Auth0、okta等身份认证提供商
- 支持多云和混合云的架构,与云厂商无关,动态地切换和分发
3 - 一些优点
API Gateway做为系统统一入口,实现了对各个微服务间的整合,同时又做到了对客户端友好,屏蔽系统的复杂性和差异性,让 API请求更安全、更高效的得到处理。
- 可以与微服务注册中心连接,实现微服务无感知动态扩容。
- 对于无法访问的服务,可以做到自动熔断,无需人工参与。
- 可以方便的实现蓝绿部署,金丝雀发布或A/B发布。
- 做为系统统一入口,可以将各个微服务公共功能放在API Gateway中实现,以尽可能减少各服务的职责。
- 帮助实现客户端的负载均衡策略。
- 云原生友好,架构轻巧,便于容器化
4 - 全生命周期管理
API 的全生命周期管理:除了反向代理、负载均衡、限流限速的插件外,还包括了 API 的设计、文档以及测试等,也就是说,从项目设计到测试上线,所有的东西都在整个 API 网关的功能范畴内。
5 - 对比
闭源的商业API网关产品,功能都很完善,覆盖了API的设计、多语言SDK、文档、测试和发布等全生命周期管理,并且提供SaaS服务,有些还与公有云做了集成,使用起来非常方便。
但同时也存在“平台锁定”和无法二次开发的问题。
因为一旦使用了“闭源”的方案,就很难平滑和低成本地迁移到其他平台,并且只能依靠厂商来定制开发需求。
因此一般的选型原则:云原生友好的、高性能的、开源的 API 网关。
6 - 参考信息
- 云原生软件基金会全景图CNCF: https://landscape.cncf.io/
- https://segmentfault.com/a/1190000020303778