Gateway--概述
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的区别
- Zuul1.x是一个基于阻塞I/O的API 网关
- Zuul1.x基于Servlet2.5使用阻塞架构,它不支持任何长连接(如WebSocket)Zuul的设计模式和Nginx比较相似,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能较差
- Zuul2.x理念更加先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。Zuul2.x的性能较Zuul1.x有很大提升。在性能方面,根据官网提供的基准测试,SpringCloud Gateway的RPS(每秒请求数)是Zuul的1.6倍。
- Spring Cloud Gateway建立在Spring Framewor5、Project Reactor和Spring Boot2之上,使用非阻塞API
- 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--概述相关推荐
- Spring Cloud Gateway 概述 《重新定义Spring Cloud实战》读书笔记
什么是Spring Cloud Gateway Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0.Spring Boot 2.0 和 Project Reac ...
- elasticSearch6源码分析(5)gateway模块
1.gateway概述 The local gateway module stores the cluster state and shard data across full cluster res ...
- SpringCloud - GateWay服务网关
文章目录 一. Gateway概述 1.Gateway是什么 2. Gateway作用 3. 微服务架构中网关的位置 4. SpringCloud Gateway概念 5. SpringCloud G ...
- GateWay的介绍与使用
GateWay的介绍与使用 文章目录 GateWay的介绍与使用 一.GateWay介绍 1. GateWay概述 2. GateWay非阻塞异步模型 3. Gateway工作流程 二.Gateway ...
- Spring Cloud Alibaba 快速入门(七):Gateway微服务网关
前言:在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关.微服务网关处理了路由转发,负载均衡,缓存,权限校验,监控,限流控制,日志等.Spring Cloud Gateway是Spring ...
- SpringCloud知识概括
SpringCloud知识概括 SpringCloud简介 Eureka Zookeeper Consul Ribbon OpenFeign Hystrix Gateway Config Bus St ...
- 系统怎么设计usb启动_在启动中启动设计系统
系统怎么设计usb启动 重点 (Top highlight) Design systems are all the rage now and you've probably seen this ter ...
- pc系统设计演变_设计师的演变
pc系统设计演变 Since millions of years, every species on this earth is undergoing changes with regard to t ...
- 59-硅谷课堂5-硅谷课堂-整合网关与订单 + 营销管理模块 + 公众号菜单管理
59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记内容来源与尚硅谷教学视频 文章目录 59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记中涉及资源: 一.Sprin ...
- 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 ...
最新文章
- ​JGG | TaxonKit:一款实用又高效的NCBI分类学数据工具包
- BiLSTM+CRF的损失由发射矩阵和转移矩阵计算而得 BiLSTM+CRF命名实体识别:达观杯败走记(下篇
- Java NIO系列教程(一) Java NIO 概述
- 消息称谷歌Pixel系列手机默认禁用美颜功能
- C#重绘TabControl控件的源码(转)
- linux基础-权限管理,手工添加用户,umask,bash配置文件
- 打乱 数字_“142857”金字塔中的神秘数字,其中隐藏什么秘密?
- HDOJ(航电)题目分类大全
- linux安装rmp格式文件,在CentOS Linux上使用yum、dnf和rpm安装RPM文件(Packages)
- java null 在前_java中判断对象为null时,null在前面还是后面
- 玩客云 装java_玩客云内置 eMMC 存储刷入 armbian
- 机器学习(11)——时间序列分析
- 浏览器主页被hao123等篡改解决方法
- 一个网站的pv代表什么?
- unity 动态图集
- 位图和矢量图谁的色彩更丰富_更少的更多色彩
- InnoDB和Myisam引擎的优缺点
- 什么是iBeacon
- beckhoff词汇,百晓生知识处理库抽取
- python发送文件到指定的邮箱_怎么用qq邮箱发文件-用python发送139邮箱电子邮件和短信通知,让你不再错过重要信息...