博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gateway--概述
阅读量:2442 次
发布时间:2019-05-10

本文共 2417 字,大约阅读时间需要 8 分钟。

Gateway

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

在这里插入图片描述

Gateway是在Spring生态之上构建的API网关服务,基于Spring5,SpringBoot 2和Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。

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

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

源码架构:

在这里插入图片描述
微服务架构中网关的位置:
在这里插入图片描述

为什么选择Gateway

  • neflix不太靠谱,zuul2.0一直跳票,迟迟不发布
    一方面因为Zuul1.0已经进入了维护阶段,而且gateway是SpringCloud团队研发的,是亲儿子产品,值得信赖。Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix早就发布了Zuul2.x,但是SpringCloud貌似没有整合计划。而且Netflix相关组件都宣布进入维护期,不知前景如何。

Gateway特性

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

Gateway与Zuul的区别

  1. Zuul1.x是一个基于阻塞I/O的API 网关
  2. Zuul1.x基于Servlet2.5使用阻塞架构,它不支持任何长连接(如WebSocket)Zuul的设计模式和Nginx比较相似,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能较差
  3. Zuul2.x理念更加先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。Zuul2.x的性能较Zuul1.x有很大提升。在性能方面,根据官网提供的基准测试,SpringCloud Gateway的RPS(每秒请求数)是Zuul的1.6倍。
  4. Spring Cloud Gateway建立在Spring Framewor5、Project Reactor和Spring Boot2之上,使用非阻塞API
  5. Spring Cloud Gateway 还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验

Zuul1.x模型

SpringCloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Servlet IO处理模型。

servlet由servlet container进行生命周期管理。

  • container启动时构造servlet对象并调用servlet init()进行初始化;
  • container运行时接受请求,并为每个请求分配一个线程(一般从线程池中获取空闲线程)然后调用service();
  • container关闭时调用servlet destory()销毁servlet;

在这里插入图片描述

上述模式的缺点:

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

所以Zuul1.x是基于Servlet之上的一个阻塞式处理模型,即Spring实现了处理所有request请求的servlet(DispatcherServlet)并由该servlet阻塞式处理。所以SpringCloud Zuul无法摆脱servlet模型的弊端。

Gateway模型

传统的Web框架,比如说:struts2,springmvc等都是基于Servlet API与Servlet容器之上运行的。

但是在Servlet3.1之后有了异步非阻塞的支持。而WebFlux是一个典型的非阻塞异步框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上。非阻塞+函数式编程(Spring5必须使用java8)。

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

在这里插入图片描述

转载地址:http://rspqb.baihongyu.com/

你可能感兴趣的文章
使用批处理脚本上传ftp_通过批处理脚本将文件上传到FTP站点
查看>>
linux下如何更改主机名_如何在不重新启动的情况下更改Linux主机名
查看>>
pxe网络启动引导程序_如何使用PXE设置网络可引导实用程序光盘
查看>>
凌乱的yyy_如何清理凌乱的Internet Explorer上下文菜单
查看>>
Laravel Eloquent:API资源
查看>>
在React中使用Font Awesome 5
查看>>
React Hooks入门
查看>>
盖茨比乔布斯_用盖茨比快速浏览WordPress站点
查看>>
docker react_10分钟内即可实现具有安全性的React + Docker
查看>>
vue.js表单验证_Vue.js中的模板驱动表单验证
查看>>
软件测试结束标志_使用功能标志进行生产中的测试
查看>>
css网格_在CSS网格中放置,跨度和密度
查看>>
火狐动态调试css_使用Firefox开发工具调试CSS网格
查看>>
服务周期性工作内容_使服务工作者生命周期神秘化
查看>>
响应式屏幕_检测角度的响应式屏幕尺寸
查看>>
vue中使用vuex_使用Vuex在Vue中处理身份验证
查看>>
报纸打字项目_使用打字稿设置节点项目
查看>>
nuxt.js 全局 js_在Nuxt.js应用中实现身份验证
查看>>
具有NgClass和NgStyle的Angular 2+类
查看>>
网络抓取_使用ScrapeStack轻松进行网络抓取
查看>>