gateway基础知识点
什么是gateway
Cloud全家桶中有一个很重要的组件就是网关,在1.x版本中是采用的zuul网关,但是在2.x版本中,zuul的升级一直在跳票,SpringCloud最后自己研发了一个网关代替zuul。那就是springCloud Gateway。
Gateway实在spring生态系统上构建的API网关,基于Spring5,Spring Boot 2.0和Project Reactor等技术。
Gateway指在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤功能。例如:熔断、限流、重试等。
官网原文翻译:
SpringCloud gateWay 是spring cloud的一个全新项目,基于Spring 5.0+Spring Boot 2.0和Project Reactor等技术开发的网关,他旨在为微服务框架提供一种简单有效统一的APi 路由管理方式。
SpringCloud Gateway 作为Spring Cloud 生态系统中网关,目标是替代zuul,在Spring cloud 2.0以上的版本中, 没有对新版本的zuul 2.0 以上最新高性能版本进行集成,仍然还是使用zuul1.x非Reactor模式的老版本。而为了提升网关的性能,Spring cloud Gateway 是基于WebFlux框架实现的,而WebFlux框架的底层使用了高性能的Reactor模式通信框架Netty
Spring Cloud GateWay 的目标是提供统一的路由方式且基于Filter链的方式提供了网关基本的功能。例如:安全。监控/指标。和限流。
Spring Cloud GateWay 与Zuul的区别------相对的优势
Zuul:
1、zuul1.x版本已经进入了维护阶段,而且zuul的很多功能没有使用起来。
2、Netflix相关组件已经宣布进入维护期,不知前景如何,虽然Netflix早发布可最新的Zuul2.0版本,但是SpringCloud没有整合的计划(Zuul2.0版本想基于Netty非阻塞和长支持长连接,Springcloud目前没有整合进来)
3、Zuul1.x版本一个基于阻塞I/O的Api GateWay
4、Zuul1.x版本基于servlet2.5使用阻塞构架,他不支持任何长链接(如:webSocket),Zuul的设计模式和nginx较像,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作完成。但是差别是Nginx是使用C++来实现而Zuul是使用Java来实现的,而JVM本身第一次加载会比较慢,是的Zuul的性能相对较差。
SpringCloud Gateway:
1、Gateway是有SpringCloud团队研发的。
2、GateWay是基于异步非阻塞模型上进行的开发的,性能相对较高。
3、GateWay基于SpringFramework5, Project Reactor和Spring Boot2.0进行构建具备一些新特性:
动态路由:能够匹配任何请求属性
可以对路由指定的Predicate(断言)和Filter(过滤器)
集成Hystrix熔断功能
集成Spring Cloud 服务发现功能
易于编写的Predicate(断言)和Filter(过滤器)
请求限流功能
支持路径重写
4、SpringCloud GateWay支持长链接(比如:webSocket),并且与Spring紧密集成拥有更好体验。
** 3大核心**
Route路由:
路由是构建网关的基本模块。他是有ID,目标URI,一系列的断言和过滤器组成的,如果断言为true则匹配该路由
Predicate断言:
开发人员可以匹配HTTP请求中的所有的内容(例如请求头或者请求参数),如果请求和断言先相匹配则进行路由
Filter过滤器:
指的是Spring框架中的GateWayFilter实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
SpringCloud 工作流程
- 客户端向Spring Cloud GateWay 发出请求。然后在GateWay Handler Mapping(路由匹配)中找到与请求先相匹配的路由,将其发送到GateWay Web Handler
- Handler 在通过指定的过滤器链接来将请求发送到我们实际的服务执行业务逻辑,然后返回,过滤器可能会在发送代理之前或者之后执行业务逻辑
- Filter在之前执行可以做参数校验、流量监控、日志输出、协议转换等,在之后可以做响应内容、响应头修改、日志输出、流量监控等