API网关服务综述
从以下几个方面对互联网上出现的API网关服务进行介绍:
1. API 网关的分类
2. 网关的架构
3. 对具备服务网关能力(Nginx / Orange/kong / API Umbrella/DJ / Amazon /Netflix/阿里)的产品介绍
1. API网关的分类
API GW的定位主要有4类:
(1)面向Web App
在物理形态上类似前后端分离,此时的Web App已经不是全功能的Web App,而是根据场景定制、场景化的App。
(2)面向Mobile App
移动App是后端Service的使用者,此时的API GW还需要承担一部分MDM(此处是指移动设备管理,不是主数据管理)的职能。
(3)面向Partner OpenAPI
为了满足业务形态对外开放,与企业外部合作伙伴建立生态圈,此时的API GW需要增加配额、流控、令牌等一系列安全管控功能。当互联网形态逐渐影响传统企业时,很多系统都会为了导入流量或者内容,依赖外部合作伙伴的能力,一些典型的例子就是使用「合作方账号登录」、「使用第三方支付平台支付」等等,这些对于企业内部来说,都是一些外部能力。此时的API GW就需要在边界上,为企业内部Service 统一调用外部的API做统一的认证、(多租户形式的)授权、以及访问控制。
图1.1 API网关服务
(4)面向IoT- SmartDevice
物联网网关:支持设备从工业控制协议、小无线向IP协议的转换,以便能够连入互联网、协议转换
物联网网中的API网关服务:服务请求的路由、安全验证、请求流量控制、数据流分析
2. 网关的架构
图2.1 中心化
图 2.2去中心化
二者间的比较:
成熟 存在大量的开源的工具 ————— 性能和可靠性高
可控性高 ————— 实现上比较复杂、可扩展性低
比较安全 —————
3. 具备API网关服务能力的开源项目介绍
3.1 Nginx系列
Nginx / Orange/kong / APIUmbrella 利用Nginx反向代理的功能,扩展开发了一些面向非业务功能的功能,主要是管理、监控、安全、统计四个方面。
海视云那边选择Nginx作为API网关服务器应该是出于以下2点考虑:
(1)易部署
Nginx 提供通过操作配置文件的方式来实现反向代理和负载均衡,因为比较成熟,所以技术实现上简单、可靠
(2)高可用
性能稳定、低系统资源的消耗
Nginx用做API网关服务器实现服务请求的路由非常优秀,但是他对于非业务功能的支持比较匮乏,原生态的代理功能在安全、监控等领域不支持。因此kong诞生了,kong提供了19个插件式的功能实现,涵盖广泛,像权限控制、流量控制、身份认证、日志等功能,但缺少对报文转换的能力(为了避免产生业务场景的耦合,更通用)。
3.2 Kong
Kong 是由Mashape公司开发的一款APIGateway的软件,Kong是基于nginx开发,有两个组件:Server用来接收客户端的API请求,Cassandra用来存储操作数据。Kong支持水平扩展,通过前置的负载均衡器向这些机器分发请求,根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。Kong中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在API请求响应循环的生命周期中被执行。插件使用Lua编写,而且Kong还有如下几个基础功能:HTTP基本认证、**认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及nginx监控。
Kong支持集群方案,可以加入多个Kong节点来保障服务的高可用性以及提高负载的能力,多个kong组成的集群需要使用共享数据库(Cassandra、PostgreSQL),以保证集群数据的一致性。
图3.1
3.2 其他
AmazonAPI Gateway :
一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的 API。只需在 AWS 管理控制台中点击几下,您便可以创建可充当应用程序“前门”的 API,从后端服务访问数据、业务逻辑或功能,例如基于 Amazon Elastic Compute Cloud (Amazon EC2)运行的工作负载、基于 AWS Lambda 运行的代码或任意Web 应用。Amazon API Gateway 负责管理所有任务,涉及接受和处理成千上万个并发 API 调用,包括流量管理、授权和访问控制、监控以及 API 版本管理。Amazon API Gateway 没有最低费用或启动成本,您只需为收到的 API 调用和传输出去的数据量付费。
Netflix 自主研发的 Zuul:(able那边的也应该算是自主研发的)
Zuul采用PRPE模型,最主要是功能就是为Netflix自身的核心视频业务,并且它开源的也是业务方面相关的技术,所以说他更应该是一个业务平台,不是技术平台,参考意义不大。
阿里及其他的服务提供商:
提供API Gateway托管服务,辅助用户将能力、服务、数据以接口的形式开放给合作伙伴。提供防攻击、防重放、请求加密、身份认证、权限管理、流量控制等多重手段保证 API 安全,降低 API 开放风险。
提供 API 定义、测试、发布、下线等全生命周期管理,并生成 SDK、API 说明文档,提升 API 管理、迭代的效率。提供便捷的监控、报警、分析、API市场等运维、运营工具,降低 API 运营、维护成本。
Kubernetes(k8s):
Google开源的容器集群管理系统。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。Service Controller-管理维护Service,提供负载以及服务代理。