一、什么是API网关

在开始讲解Spring Cloud GateWay之前呢,有必要说明一下什么是API网关。网关这个词,最早是出现在网络设备中,比如在彼此隔离的两个局域网中间的起到路由功能、隔离功能、安全验证功能的网络设备,通常被称为“网关”。

在软件开发方面,网关通常是用来隔离用户端和服务端的软件应用,通常被称为API网关。

所以使用API的好处是:

  • 面向前端开发人员更加友好,前端开发人员面向的入口减少,便于维护
  • 服务访问的认证鉴权更加方便,可以放在API网关统一去做。避免分散造成的开发及维护成本。
  • 访问日志、限流等公共服务也可以在网关上集中完成。避免分散造成的开发及维护成本。

说了API网关的这么多好处,那么有没有坏处呢?也是有的,而且很重要。

  • 当你使用了API网关之后,所有的请求都要多一次转发,造成一定程度上的响应时长的延长
  • 当你使用了API网关之后,意味着网关作为流量入口需要承担比微服务更多的流量负载。所以网关本身的架构性能及稳定性非常重要。

虽然我们可以在网关的前面再去加一层nginx或者haproxy等负载均衡器,但是仍旧很难改变网关在一定程度上的流量集中的问题。

所以,笔者在很多场合下呼吁不要滥用微服务网关。你要权衡一下你当前的架构是否真的需要一个网关。衡量性能、稳定性以及维护成本之间关系,去决定要不要使用服务网关。

 

一、简介

Spring Cloud GateWay 是由Spring 官方社区开发的API 服务网关,在新一代的开发技术中使用到了Spring WebFlux的全新的响应式的非阻塞IO框架。相对于Spring Cloud第一代的网关组件zuul,性能有了长足的进步(宣称性能提升1.6倍)。WebFlux底层是基于高性能的非阻塞IO通信框架Netty实现的。

核心功能特性

笔者在上一节已经为大家介绍过,API服务网关的主要作用有三个:

  • 统一流量入口,面向前端更加友好。减少分散入口配置,降低客户端与服务端的耦合度。
  • 统一认证鉴权,避免多个服务分散鉴权造成的维护与开发的成本升高
  • 访问日志、限流、过滤、缓存、监控等公共服务也可以在网关上集中完成。避免分散造成的开发及维护成本

二、聊一聊Zuul

正如笔者所说网关本身的架构性能及稳定性非常重要。然而性能就是Zuul的短板,因为它是基于servlet的阻塞IO模型开发的(下一节我会专门介绍Zuul和Spring Cloud GateWay IO模型的差异)。

  • Zuul 1.0在netflix官方已经进入了维护阶段,netflix对Spring Cloud社区的支持也已经基本属于“88了您哎”的状态
  • 虽然Netflix很早就宣称了要对zuul进行升级改造,也就是Zuul 2.0,但是目前与Spring Cloud的整合也处于难产状态
  • 基于以上的原因,Spring 社区自己开发了Spring Cloud gateWay。采用了spring 官方的响应式非阻塞框架webflux。官网测试结果性能是Zuul的1.6倍。

综上所述:笔者觉得目前Zuul已经没有任何学习的必要了。