springcloud-gateway

news2024/11/20 0:40:07

网关zuul: https://github.com/Netflix/zuul/wiki 

Spring Cloud

 

网关gateway:Spring Cloud Gateway

Spring Cloud Gateway 

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

  

SpringCloud Gateway是Spring Cloud的一个全新项目,基于Spring 5.0+Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。

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

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

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

简化版的微服务

为什么有zuul还用gateway? 

 

方面因为Zuul1.0已经进入了维护阶段,而且Gateway是SpringCloud团队研发的,是亲儿子产品,值得信赖。而且很多功能Zuul都没有用起来也非常的简单便捷。
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix早就发布了最新的Zuul 2.x,但Spring Cloud貌似没有整合计划。

而且Netflix相关组件都宣布进入维护期;不知前景如何?
多方面综合考虑Gateway是很理想的网关选择。 

Spring Cloud Gateway具有如下特性:

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

Spring Cloud Gateway 与Zuul的区别

在SpringCloud Finchley正式版之前,Spring Cloud推荐的网关是Netflix提供的Zuul:
1、Zuul 1.x,是一个基于阻塞/O的APl Gateway
2、Zuul 1.x基于Servlet 2.5使用阻塞架构它不支持任何长连接(如WebSocket) Zuul的设计模式和Nginx较像,每次V/О操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul用Java 实现,而JVM本身会有第—次加载较慢的情况,使得Zuul的性能相对较差。
3、Zuul 2.x理念更先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。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之上,使用非阻塞 API。5、Spring Cloud Gateway还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验 

zuul1.x模型:

Springcloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Servlet lO处理模型。
学过web课程都知道一个题目,Servlet的生命周期?servlet由servlet container进行生命周期管理。

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

container关闭时调用servlet destory)销毁servlet; 

 

 

什么是webflux?

 

 

gateway模型: 

gateway概念 

route路由:

路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由

 断言Predicate:

参考的是Java8的java.util.function.Predicate
开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

filter过滤链器: 

指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

 

 

 客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到GatewayWeb Handler。
Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。
过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,
在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

 总结:gateway核心逻辑就是路由和执行过滤链

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【韩顺平Linux】学习笔记4

【韩顺平Linux】学习笔记4一、Linux组的介绍1.1文件/目录所有者1.2 组的创建1.3 其它组1.4 权限的基本介绍1.5 权限说明案例1.6 修改权限-chmod1.7 修改文件/目录所有者-chown/-chgrp二、crond任务调度三、at定时任务一、Linux组的介绍 在Linux中,每个用户都属于一个…

AtCoder Beginner Contest 284.(A--E)

AtCoder Beginner Contest 284A - Sequence of Strings1、问题2、代码B - Multi Test Cases1、问题2、代码C - Count Connected Components1、问题:2、思路:——并查集、DFS3、代码方法1:并查集方法2:DFSD - Happy New Year 20231…

Linux内核学习笔记——内核页表隔离KPTI机制(源码分析)

KPTI(Kernel PageTable Isolation)全称内核页表隔离,它通过完全分离用户空间与内核空间页表来解决页表泄露。 KPTI中每个进程有两套页表——内核态页表与用户态页表(两个地址空间)。 内核态页表只能在内核态下访问,可以创建到内核和用户的映射&#xf…

单体的 TienChin 和微服务的 TienChin 有何异同?

有不少小伙伴希望松哥能整一个微服务的实战项目,微服务这块技术点其实松哥是讲过很多了,图文版的教程视频版的教程都有,不过确实缺乏一个项目,所以我在想等 TienChin 项目搞完之后,和小伙伴们也来一起搞一个微服务的项…

nacos2.0客户端注册流程分析

版本介绍 copy几个jar包出来康康把 spring-cloud-starter-alibaba-nacos-config-2021.0.4.0.jar spring-cloud-starter-alibaba-nacos-discovery-2021.0.4.0.jar nacos-client-2.0.4.jar 注册流程 读取Spring Boot装载配置文件 spring.factories,找到启动类 Nac…

一步一步学爬虫(4)数据存储之Elasticsearch搜索引擎存储

Elasticsearch搜索引擎存储1. Elasticsearch 介绍2. Elasticsearch 相关概念3. 准备工作3.1 下载程序3.2 解压缩,配置文件修改4. 创建索引5. 删除索引6. 插入数据7. 更新数据8. 删除数据9. 查询数据10. 总结想查数据,就免不了搜索,而搜索离不…

【微信小程序】全局数据共享

小程序中的全局数据共享方案在小程序中可以使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享。● mobx-miniprogram用来创建Store实例对象● mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中使用npm install --save…

Python虚拟环境

学习视频:安装不算完事,只有理解了虚拟环境才算真正掌握 Python 环境 同类笔记:Python虚拟环境 目录 一、什么是虚拟环境 二、虚拟环境相关工具的使用和原理 创建虚拟环境 虚拟环境目录分析 虚拟环境的激活 虚拟环境做了什么 退出虚…

【论文精读】360MVSNet

今天读的是发表在WACV2023上的MVS文章,该文章提出了基于全景相机的MVS pipeline。 文章链接:点击前往 代码链接:暂未开源。 文章目录Abstract1. Introduction2. Related works3. Method3.1 Feature Extraction3.2 360 Spherical Sweeping3.2.…

【经典笔试题2】

test1 test2 test3 test4 test5 test1 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } 程序的结果是什么?首先分析代码,a是数组名,是数组首元素…

详解Web服务器与http https协议工作过程

Web服务器 URL URI URL是URI的一个子集 www www所用的协议 http请求报文分析 状态码(空行:最后一 个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。) 网址解析 网址注释实例 HTT…

从工厂方法到注解的小例子

目录一、背景介绍二、思路&方案三、过程过程图一过程图二过程图三过程图四(运行时的图)代码四、总结五、升华一、背景介绍 上篇"自定义注解和注解解析器",通过小例子介绍了自定义注解的运用;本篇继续基于小例子来实现工厂方法,以及注解实…

linux Regmap API

1.针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问I2C/SPI 设备的时候,为此引入了 Regmap 子系…

如何用智能地教狗狗上厕所

背景 22年养了一只很可爱的小狗狗,我其实就一个问题:为啥这么可爱的狗狗会拉屎撒尿呀? 自从崽崽来了我们家之后,最让我们头疼的就是它乱拉、乱尿的问题了,以前会在家里到处乱来,最近一段时间好了很多&…

机器学习(整体结构)

国科大《机器学习》内容,周晓飞老师讲的挺不错的,浅显易懂。 本来是想整理下课程内容的,然而动手后才发现内容过多(很想吐槽,为啥这么多模型?不能相互替代么?)简略画个思维导图算啦…

探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter-返回值处理

前言 上回我们回答了ReqeustMappingHandlerAdapter调用目标方法的参数解析问题,今天我们再来回答第二个问题:怎么处理方法调用的返回值。 深入分析返回值处理需求 RequestMapping处理器的返回值类型 相信很多同学对于这个返回值的第一个反应就是返回一…

图解JDK1.7中HashMap头插法扩容造成的死循环问题

JDK1.7中HashMap头插法扩容造成的死循环问题 文章目录JDK1.7中HashMap头插法扩容造成的死循环问题一、背景二、源码解读三、图解单线程环境中扩容多线程环境中扩容四.总结一、背景 HashMap是线程不安全的,在并发使用HashMap时很容易出现一些问题,其中最…

ArcGIS基础实验操作100例--实验66符号图层的保存与加载

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验66 符号图层的保存与加载 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

【OpenGL】基础光照

介绍 现实世界中的光照是极其复杂,难以计算的,因此OpenGL的光照使用的是简化的模型,其中一个模型被称为冯氏光照模型(Phong Lighting Model)。 冯氏光照模型的主要结构由三个分量组成: 环境(Ambient)光照漫反射(Diffuse)光照镜…

blender学习笔记2023.01.05

文章目录why基操why 想画条大黄鱼 想画一下渔网 网箱 写笔记预防忘记 基操 1.语言改为中文 不过后续可能改回英文去 2.顶部导航栏—编辑—偏好设置—界面—翻译—(关掉)新建数据 目的是预防插件导致奇奇怪怪的报错 这里左下角位置处点击 保存修改 3…