1 API网关简介
熟悉微服务的应该都知道,常说的API网关其实也是微服务中的一个服务,整个应用系统的唯一入口就在API网关
API网关为每个客户端提供定制的API。当然它的功能职责还有很多,比如身份验证、负载均衡、缓存、协议转换、监控、缓存、限流熔断、静态响应、统一的请求头处理、灰度发布等都可以在API网关中统一完成。
2 API网关的作用
我总结了一下API网关主要有以下11种功能职责:
- 路由功能
- 流量染色
- 文档中心
- 日志审计
- 负载均衡
- 统一鉴权
- 限流熔断
- 黑白名单
- 灰度发布
- 协议转换
- 指标监控
- API聚合
- 高可用
3 常见的API网关
常见的API网关有:Nginx、Zuul、Spring Cloud GetWay、Kong、Traefik、Spring Cloud Alibaba Gateway。
- Nginx
Nginx是一个轻量级的高性能HTTP反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。
用Nginx代理后,客户端的请求由其进行分发到服务器处理,服务器处理完后再返回Nginx,由Nginx结果返回给客户端。
Nginx 采用了异步非阻塞的方式来处理请求,理论上来说Nginx 能同时处理成千上万个请求。
- Zuul
Zuul 是 Netflix 开源的一个API网关组件,Zuul和 Spring Cloud 微服务框架种 Eureka、Ribbon、Hystrix 等组件结合使用。
Zuul 实现最核心的是一堆过滤器,Zuul作为网关可以实现以下责任工作:
统一鉴权
动态路由
负载均衡
压力测试
审查与监控
多区域弹性
API聚合
Netflix 目前推出了两个版本的Zuul:Zuul1、 Zuul2。
Zuul1采用阻塞和多线程,最终基于Servlet实现的,Zuul1会存在内部延迟严重的情况。
Zuul2 有运行在异步和无阻塞上,线程周期通过事件和回调处理,因此因线程数的减少导致开销得到了很大的优化。
- Spring Cloud GetWay
由于Spring Cloud Zuul的一些缺点,Spring Cloud推出了新的Spring Cloud Gateway组件,它的出现就是为了替换掉Zuul,因此有了它的出现市面上也很少使用Zuul网关了。
Spring Cloud Gateway基于Spring5.0 + SpringBoot2.0 + WebFlux等技术开发的,它的性能相较于Zuul更具优势,看过官方文档的都知道Spring Cloud GateWay的性能是Zuul的1.6倍。
Spring Cloud Gateway基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型。因此相较于Zuul它的性能是非常的高的,熟悉异步非阻塞模型的就更能明白这一点。
Spring Cloud Gateway可以与Spring Cloud 其他组件如Eureka、Ribbon、Hystrix等结合使用。
同样Spring Cloud Gateway可以完成以下这些职责功能:
统一权
路径重写
⽇志监控
实现路由转发
负载均衡
熔断
限流
API聚合
- Spring Cloud Alibaba Gateway
Spring Cloud Alibaba是阿里参考的Spring Cloud的升级版本,它的网关主要是用的Spring Cloud Alibaba Gateway,它的网关可以使用nacos作为注册中心。当然实际Spring Cloud框架使用中,大多数企业主要使用其中的Nacos注册中心组件,其他的使用Spring Cloud的组件,这些组件一样是互通互用的。
Spring Cloud Alibaba Gateway 同样可以完成以下这些职责功能:
统一权
路径重写
⽇志监控
实现路由转发
负载均衡
熔断
限流
API聚合
- Kong
Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。
Kong三大组件:
Apache Cassandra/PostgreSQL :用来存储操作数据。
Kong Server :基于Nginx的服务器,用来接收API请求。
Kong dashboard:官推的UI管理工具(用restfull也可以)。
Kong可以完成以下这些职责功能:
HTTP基本认证
请求转发
Nginx监控
TCP
UDP
密钥认证
API请求限流
CORS(跨域资源共享)
文件日志
- Traefik
Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, K8s等) 自动化和动态的应用它的配置文件设置。
Traefik重要特性:
后端断路器、负载均衡、容错机制。
清爽的前端页面,可监控服务指标。
用Go语言编写的单一可执行文件,很快。
监听后台变化进而自动化应用新的配置文件设置。
多后台支持:Docker, Swarm, Kubernetes等等。
支持Rest API、Websocket、Docker镜像。
配置文件热更新,不需要重启Traefik服务。
4 API网关对比,选型最优API网关
对市面上常用的几种网关对比如下:
其实从上面的对比来看,市面上常用的API网关:Nginx、Spring Cloud GetWay。