作为SpringCloud 生态系统中的网关,目标是代替Zuul,在SpringCloud2.0版本中,没有对新版本的Zuul2.0以上最新高性能版本进行集成,任然是Zuul1.x ,非Reactor 模式的老版本。而为了提升网关的性能,SpringCloud Gateway 是基于WebFlux 框架实现的,而webFlux框架底层则使用了高性能的Reactor 模式通信框架Netty
SpringCloud Gateway 的目标提供统一的路由方式且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
Webflux 框架插播:
在Servlet3.1 之后有了异步非阻塞的支持。而Webflux是一个典型非阻塞异步的框架,它的核心是基于Reactor相关Api 实现的。相对于传统的Web 框架,他可以运行在诸如Netty,Undertow 及支持Servlet3.1的容器上。非阻塞式+函数式编程(Spring5 必须让你使用java8)
Spring Cloud Gateway 和 Zuul 的区别
Spring Cloud Gateway 具有如下特性:
基于Spring Framework5, Project Reactor 和 Spring Boot 2.0 进行构建
动态路由:能够匹配任何请求属性
可以对路由指定 Predicate (断言) 和Filter(过滤器)
集成Hystrix 断路器功能
集成Spring Cloud 服务发现
易于编写的Predicate (断言) 和Filter (过滤器)
请求限流功能
支持路径重写
Zuul 1.x 基于servlet 2.0 阻塞模型,在高并发的情况下效率低下
而SpringCloud Gateway 底层使用了webflux(Spring 5.0引入的新的响应式框架,区别于SpringMvc 它不需要依赖于Servlet) 而webflux底层又使用Netty 一个非阻塞高性能的网络通信框架,非常适用于高并发场景。
SpringCloud Gateway 工作的流程
路由:id+uri请求通过断言是否符合我的路由规则然后通过过滤器Filter在请求前和请求后做一些精细化的操作。
断言:参考 1.8 的Predicate (断言)
Filter过滤链:一堆