说一说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 |
公司 | 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,有付费商业版,开源版和付费版主要区别在于部分企业版插件
优点:
- 性能非常出色,基于Nginx Openresty实现,源码简洁
- 插件功能比较完善,支持自定义插件扩展,灵活易用,基本满足常见场景
- 支持Docker,K8S等应用场景,部署灵活
- 官方文档丰富,阐述清楚,上手快
缺点:
- Lua语言开发,需要Linux编译环境,二次开发环境有特殊要求
- 已有开源插件中并未覆盖API网关全部功能,
WSO2
功能十分强大,开源协议Apache License 2.0,提供云服务和商业support支持服务
优点:
- 功能十分齐全,并提供配套组件项目
- Java开发,开发环境普及度高
- 支持Docker K8S等应用场景,部署灵活
缺点:
- 源码过于庞大,难以消化,基本都是自定义jar包
- 官方公开文档信息不全,没有付费Support难以使用(我觉得是对方故意的)
##选型结论
最终,团队选了Kong作为实现基础,基于其插件进行二次开发。
##后记
Lua的开发确实不太令人舒服,如果团队中没有人使用过Lua开发还是建议不要轻易使用。
Zuul的开发还是更适合Java团队使用,找时间可以看看zuul2的性能是否有所改善。
P.S. 由于刚刚换了工作,所以最近一段时间没有更新文章,稍后会慢慢恢复。