Spring Cloud Gateway入门介绍

一、产生背景

Cloud全家桶中有一个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但是在2.x版本中,Zuul的升级一直跳票,迟迟不发布,Spring Cloud最后自己研发了一个网关替代Zuul,就是Gateway

二、介绍

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,基于Spring 5.0 + Spring Boot 2.0 和 Project Reactor 等技术开发的网关。它不能在传统的 Servlet 容器中工作,也不能构建成 war 包。它旨在为微服务架构提供一种简单有效的统一的API路由管理方式

Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,Spring Cloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty

Spring Cloud Gateway的目标是 提供统一的路由方式且基于 Filter链 的方式提供了网关基本的功能,例如:安全、监控/指标、限流

三、用途

1、反向代理
2、鉴权
3、流量控制
4、熔断
5、日志监控

四、特性

1、基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建
2、动态路由:能够匹配任何请求属性
3、可以对路由指定 Predicate(断言)和 Filter(过滤器)
4、集成Hystrix的断路器功能
5、集成Spring Cloud服务发现功能
6、易于编写的 Predicate(断言)和 Filter(过滤器)
7、请求限流功能
8、支持路径重写

五、Spring Cloud Gateway 与Zuul的区别

在Spring Cloud Finchley正式版之前,Spring Cloud 推荐的网关是 Netflix 提供的Zuul

1、Zuul 1.x 是一个基于阻塞 I/O 的 API 网关

2、Zuul 1.x 基于Servlet 2.5使用阻塞架构,它不支持任何长连接(如 WebSocket)Zuul的设计模式和Nginx较像,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是**Nginx用C++**实现,Zuul用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能相对比较差

3、Zuul 2.x理念更先进,想基于Netty非阻塞和支持长连接,但是Spring Cloud目前还没有整合。Zuul 2.x的性能较Zuul 1.x有较大提升。在性能方面,根据官方提供的基准测试,Spring Cloud Gateway 的RPS(每秒请求数)是Zuul的 1.6

4、Spring Cloud Gateway 是建立在Spring Framework 5, Project Reactor 和 Spring Boot 2.0之上,使用非阻塞API

5、Spring Cloud Gateway还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验

Zuul 1.x模型:
Spring Cloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Servlet IO处理模型
Servlet是由 Servlet Container 进行生命周期管理。Container启动时构造servlet对象并调用servlet init()进行初始化;Container运行时接受请求,并且为每个请求分配一个线程(一般是从线程池中获取空闲线程),然后调用service();Container关闭时调用servlet destory()销毁servlet

Zuul 1.x模型缺点:
Servlet是一个简单的网络IO模型,当请求进入servlet container时,servlet container就会为其绑定一个线程,在并发不高的场景下这种模型是适用的,但是一旦高并发(比如压测),线程数量会上涨,而线程资源代价是昂贵的(上线文切换、内存消耗大)严重影响请求的处理时间。在一些简单业务场景下,不希望为每个请求分配一个线程,只需要1个或几个线程就能应对极大并发的请求,这种业务场景下servlet模型没有优势

所以Zuul 1.x是基于servlet之上的一个阻塞式处理模型,即Spring实现了处理所有request请求的一个servlet(DispatcherServlet)并由该servlet阻塞式处理请求,因此Zuul无法摆脱servlet模型的弊端
在这里插入图片描述

Gateway模型:
传统的Web框架,比如说:struts2,spring mvc等都是基于Servlet API与Servlet容器基础之上运行的。但是,在Servlet3.1之后有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步框架,它的核心是基于Reactor的相关API实现的。相对于传统的Web框架来说,它可以运行在诸如Netty、Undertow及支持Servlet3.1的容器上。非阻塞式+函数时编程(Spring5必须让你使用java8)

Spring WebFlux 是Spring 5.0引入的新的响应式框架,区别于Spring MVC,它不需要依赖Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值