天天看点

吃透五种主流微服务API网关,你就知道选哪个更合适了!

作者:程序猿怪咖
吃透五种主流微服务API网关,你就知道选哪个更合适了!

1 API网关简介

熟悉微服务的应该都知道,常说的API网关其实也是微服务中的一个服务,整个应用系统的唯一入口就在API网关

API网关为每个客户端提供定制的API。当然它的功能职责还有很多,比如身份验证、负载均衡、缓存、协议转换、监控、缓存、限流熔断、静态响应、统一的请求头处理、灰度发布等都可以在API网关中统一完成。

2 API网关的作用

我总结了一下API网关主要有以下11种功能职责:

  • 路由功能
  • 流量染色
  • 文档中心
  • 日志审计
  • 负载均衡
  • 统一鉴权
  • 限流熔断
  • 黑白名单
  • 灰度发布
  • 协议转换
  • 指标监控
  • API聚合
  • 高可用
吃透五种主流微服务API网关,你就知道选哪个更合适了!

3 常见的API网关

常见的API网关有:Nginx、Zuul、Spring Cloud GetWay、Kong、Traefik、Spring Cloud Alibaba Gateway。

吃透五种主流微服务API网关,你就知道选哪个更合适了!
  • 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网关,你就知道选哪个更合适了!

其实从上面的对比来看,市面上常用的API网关:Nginx、Spring Cloud GetWay。

继续阅读