API Gateway

说一说API Gateway,一切服务的入口。也称其为API Management,这是一个比我之前想象还要大的系统,这篇文章我尝试做一些总结。
下面提到的API Gateway 和 API Management 将作为等同名词,除非我特殊说明。

什么是API Gateway?

它主要做什么事情,提供什么功能
简单说就是将后面的微服务的API统一暴露出来的网关的就是API Gateway。
他应具备一下能力:

微服务API路由功能

自定义路由规则,暴露出访问路径,并可以通过访问路径路由到对应的后端服务中

用户验证及鉴权

通过对Request请求中相关信息的判断,鉴别用户和其访问权限

API版本控制和发布

API发布、上线、测试、停用已经不同版本的控制

API信息维护

这个功能类似于swagger这样的功能,展示接口调用信息

API访问流量控制

对API访问进行流量、测试、频率等方面的控制

API调用监控及报警

监控API调用执行情况,例如调用时长、是否有异常,并对敏感信息进行报警

参数校验及转换

对Request请求中的参数进行校验和转换,防止注入攻击等

当然还有其他功能,这里不一一列举了。

已知的云服务

名称 apigee AWS API 网关 阿里云API网关 腾讯云API网关
网址 apigee.com amazonaws-china.com /cn/api-gateway www.aliyun.com /product/apigateway cloud.tencent.com /product/apigateway
公司 Google Amazon Aliyun Tencent
API生命周期管理 Y Y Y Y
API身份验证 Y Y Y Y
权限控制 Y Y Y Y
算法签名、SSL Y Y Y Y
流量控制 Y Y Y Y
IP访问控制 N Y Y N
CORS Y Y Y Y
请求参数校验 Unknow Y Y N
请求参数转换 Unknow Y Y Y
API监控 Y Y Y Y
异常报警 Y Y Y N
SDK生成 Y Y Y N
Mock接口 Y Y Y Y

以上功能总结可能存在错误,可能有些是我没有找到的。同时各个厂商的功能今后可能趋同,目前看AWS和Ali做的最好。

API Gateway有哪些开源框架?

目前看到的比较理想的开源框架有:Kong、WSO2、TYK、Spring Cloud Gateway。最近主要研究了前两个,简单说明各自优缺点

Kong

使用最为广泛,开源协议Apache License 2.0,有付费商业版,开源版和付费版主要区别在于部分企业版插件

优点:

  1. 性能非常出色,基于Nginx Openresty实现,源码简洁
  2. 插件功能比较完善,支持自定义插件扩展,灵活易用,基本满足常见场景
  3. 支持Docker,K8S等应用场景,部署灵活
  4. 官方文档丰富,阐述清楚,上手快

缺点:

  1. Lua语言开发,需要Linux编译环境,二次开发环境有特殊要求
  2. 已有开源插件中并未覆盖API网关全部功能,

WSO2

功能十分强大,开源协议Apache License 2.0,提供云服务和商业support支持服务

优点:

  1. 功能十分齐全,并提供配套组件项目
  2. Java开发,开发环境普及度高
  3. 支持Docker K8S等应用场景,部署灵活

缺点:

  1. 源码过于庞大,难以消化,基本都是自定义jar包
  2. 官方公开文档信息不全,没有付费Support难以使用(我觉得是对方故意的)

##选型结论
最终,团队选了Kong作为实现基础,基于其插件进行二次开发。

##后记
Lua的开发确实不太令人舒服,如果团队中没有人使用过Lua开发还是建议不要轻易使用。
Zuul的开发还是更适合Java团队使用,找时间可以看看zuul2的性能是否有所改善。

P.S. 由于刚刚换了工作,所以最近一段时间没有更新文章,稍后会慢慢恢复。