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来实现响应式流规范。

Gateway--概述相关推荐

  1. Spring Cloud Gateway 概述 《重新定义Spring Cloud实战》读书笔记

    什么是Spring Cloud Gateway Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0.Spring Boot 2.0 和 Project Reac ...

  2. elasticSearch6源码分析(5)gateway模块

    1.gateway概述 The local gateway module stores the cluster state and shard data across full cluster res ...

  3. SpringCloud - GateWay服务网关

    文章目录 一. Gateway概述 1.Gateway是什么 2. Gateway作用 3. 微服务架构中网关的位置 4. SpringCloud Gateway概念 5. SpringCloud G ...

  4. GateWay的介绍与使用

    GateWay的介绍与使用 文章目录 GateWay的介绍与使用 一.GateWay介绍 1. GateWay概述 2. GateWay非阻塞异步模型 3. Gateway工作流程 二.Gateway ...

  5. Spring Cloud Alibaba 快速入门(七):Gateway微服务网关

    前言:在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关.微服务网关处理了路由转发,负载均衡,缓存,权限校验,监控,限流控制,日志等.Spring Cloud Gateway是Spring ...

  6. SpringCloud知识概括

    SpringCloud知识概括 SpringCloud简介 Eureka Zookeeper Consul Ribbon OpenFeign Hystrix Gateway Config Bus St ...

  7. 系统怎么设计usb启动_在启动中启动设计系统

    系统怎么设计usb启动 重点 (Top highlight) Design systems are all the rage now and you've probably seen this ter ...

  8. pc系统设计演变_设计师的演变

    pc系统设计演变 Since millions of years, every species on this earth is undergoing changes with regard to t ...

  9. 59-硅谷课堂5-硅谷课堂-整合网关与订单 + 营销管理模块 + 公众号菜单管理

    59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记内容来源与尚硅谷教学视频 文章目录 59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记中涉及资源: 一.Sprin ...

  10. java重新定义_重新定义Spring Cloud实战 PDF 下载

    资料目录: 前言 第1章 微服务与SpringCloud1 1.1 微服务架构概述1 1.1.1 应用架构的发展1 1.1.2 微服务架构3 1.1.3 微服务解决方案4 1.2 Spring Clo ...

最新文章

  1. ​JGG | TaxonKit:一款实用又高效的NCBI分类学数据工具包
  2. BiLSTM+CRF的损失由发射矩阵和转移矩阵计算而得 BiLSTM+CRF命名实体识别:达观杯败走记(下篇
  3. Java NIO系列教程(一) Java NIO 概述
  4. 消息称谷歌Pixel系列手机默认禁用美颜功能
  5. C#重绘TabControl控件的源码(转)
  6. linux基础-权限管理,手工添加用户,umask,bash配置文件
  7. 打乱 数字_“142857”金字塔中的神秘数字,其中隐藏什么秘密?
  8. HDOJ(航电)题目分类大全
  9. linux安装rmp格式文件,在CentOS Linux上使用yum、dnf和rpm安装RPM文件(Packages)
  10. java null 在前_java中判断对象为null时,null在前面还是后面
  11. 玩客云 装java_玩客云内置 eMMC 存储刷入 armbian
  12. 机器学习(11)——时间序列分析
  13. 浏览器主页被hao123等篡改解决方法
  14. 一个网站的pv代表什么?
  15. unity 动态图集
  16. 位图和矢量图谁的色彩更丰富_更少的更多色彩
  17. InnoDB和Myisam引擎的优缺点
  18. 什么是iBeacon
  19. beckhoff词汇,百晓生知识处理库抽取
  20. python发送文件到指定的邮箱_怎么用qq邮箱发文件-用python发送139邮箱电子邮件和短信通知,让你不再错过重要信息...

热门文章

  1. Rancher 磁盘空间不足问题处理
  2. 杰理AC1082/1074/1090开发开发记录
  3. 《计算机科学概论(第12版)》—第1章1.10节通信差错
  4. 7-1 厘米换算英尺英寸 (15 分)
  5. linux获取本地ip
  6. 实时级嵌入式系统半实物仿真测试平台系统描述
  7. HTTPS能否避免流量劫持?
  8. 一文了解半导体的过去、现在和未来
  9. java毕业设计基于spring框架的论坛网站项目设计和源码
  10. getElementByName与getElementByTagName的区别