springcloud 09 spring cloud gateway01 基本介绍
官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/
1.什么是spring cloud gateway
1.1说明
spring cloud gateway是基于WebFlux框架实现的。而WebFlux底层使用了高性能的Reactor通信模式框架Netty。spring cloud gateway的目标是提供统一的路由方式,且基于filter链的方式提供网关的功能,如安全、监控/指标、限流。

1.2.WebFlux基本概念
传统的Wen框架,Struts,springmvc都是基于servlet的API和servlet容器运行的。在servlet3.1之后有了异步非阻塞的支持。而WebFlux是一个典型的非阻塞异步框架。它的核心是基于Reactor的相关API实现的。相对于传统的Web框架来说,它可以允许在如Netty,Undertow及支持Servlet3.0的容器上。非阻塞+函数式编程。
Spring WebFlux是spring5.0新引入的响应式框架,区别于springmvc它不需要依赖Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范
2.有什么用
反向代理、鉴权、流量控制、熔断、日志监控....

3.spring cloud gateway的特性
spring cloud gateway基于异步非阻塞模型
基于SpringFramework5,Project Reactor,Springboot2.0构建的
动态路由:能够匹配任何请求属性
可以对路由指定断言-Predicate和过滤器-Filter
请求限流功能
支持路径重写
4.spring cloud gateway和Zuul的区别
1)Zuul 1.x是基于阻塞I/O的API 网关
2)Zuul 1.x基于Servlet2.5使用阻塞架构,它不支持任何长链接(如WebSocket),性能较差
3)Zuul 2.x理念更加先进,想基于Netty非阻塞且支持长链接,但springcloud还没有整合
4)spring cloud gateway基于SpringFramework5,Project Reactor,Springboot2.0,使用非阻塞API
5)spring cloud gateway还支持WebSocket,且和spring紧密集成,拥有更好的开发体验
5.zuul 运行模式

缺点:servlet是一个简单的网络IO模型,当请求进入Servlet Container时,Servlet Container时会为其绑定一个线程,在并发不高的场景下是适用的。但是并发量变高,线程数量就会上涨,而线程资源代价是昂贵的(上下文切换,内存消耗大),严重影响请求的处理时间。在一些简单的业务场景下,不希望为每个请求分配一个线程,只需要一个或者几个线程就可以处理极大并发的请求,这种场景下servlet模型就没有优势。
6.spring cloud gateway运行模型及工作原理
6.1模型

web请求通过一些匹配条件,定位到真正的服务节点,并且在转发的过程前后,进行一些精细化的过滤控制。predicate-断言就是匹配条件,filter就是过滤器
路由:是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
断言:开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
过滤:指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改
6.2工作原理

客户端向Spring Cloud Gateway发出请求。在Gateway Handler Mapping中进行匹配,找到和请求相匹配的路由,将其发送到网关Web处理程序Gateway Web Handler。该处理程序通过指定的请求的过滤器链,将请求发送到实际的服务执行业务逻辑,然后返回。过滤器由虚线分隔的原因是,过滤器可以在发送代理请求之前和之后运行逻辑。所有“前置”过滤器逻辑均被执行。然后发出代理请求。发出代理请求后,将运行“后”过滤器逻辑。前置过滤器可以做参数校验。权限校验、流量控制、日志输出、协议转换等。在后置过滤器中可以做响应内容、响应头的修改、日志的输出、流量健康等。
springcloud 09 spring cloud gateway01 基本介绍的更多相关文章
- Spring Cloud Alibaba-MyShop-项目介绍
本节视频 [视频]Spring Cloud Alibaba-MyShop-项目介绍 开发环境 操作系统:Windows 10 Enterprise 开发工具:Intellij IDEA 数据库:MyS ...
- spring cloud之简单介绍
以下是来自官方的一篇简单介绍: spring Cloud provides tools for developers to quickly build some of the common patte ...
- 微服务SpringCloud之Spring Cloud Config配置中心Git
微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...
- 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client
简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...
- spring cloud 微服务介绍(转)
一.理解微服务 我们通过软件架构演进过程来理解什么是微服务,软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1. 单体架构 1.1 特点(1)所有的功能集成在一个项目工程 ...
- Spring Cloud常用组件介绍
一.Eureka (Netfix下) 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 二.Spring Cloud Config (Spring下) 配置 ...
- 微服务SpringCloud之Spring Cloud Config配置中心SVN
在回来的路上看到一个个的都抱着花,吃了一路的狗粮,原本想着去旁边的工业园里跑跑步呢,想想还是算了,人家过七夕,俺们过巴西.上一博客学习了Spring Cloud Config使用git作为配置中心,本 ...
- 微服务SpringCloud之Spring Cloud Config配置中心服务化
在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...
- SpringCloud之Spring Cloud Stream:消息驱动
Spring Cloud Stream 是一个构建消息驱动微服务的框架,该框架在Spring Boot的基础上整合了Spring Integrationg来连接消息代理中间件(RabbitMQ, Ka ...
- Spring Cloud 入门概括介绍
出处: 拜托!面试请不要再问我Spring Cloud底层原理 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring ...
随机推荐
- python中的super()是什么?
技术场景:python中的super,名为超类,可以简单的理解为执行父类的__init__函数.由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题.那么本文 ...
- 2022-11-02 Acwing每日一题
逆序对的个数 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆 ...
- Java自定义排序
实现Comparator接口 实现该接口需要重写compare()方法 Arrays.sort(students, new Comparator<Student>() { @Overrid ...
- netty系列之:在netty中使用proxy protocol
目录 简介 netty对proxy protocol协议的支持 HAProxyMessage的编码解码器 netty中proxy protocol的代码示例 总结 简介 我们知道proxy proto ...
- Ubuntu环境下LLVM 15.0 完全编译 附windows编译LLVM master
1. 预先安装 sudo apt install ninja-build sudo apt install llvm clang # 第一次编译需要 sudo apt-get install libn ...
- 【Devexpress】gridcontorl设置某个特定单元格不可编辑
在gridcontorl中一般情况下我们使用的都是设置一列不可编辑 那么如何设置一个单元格不可编辑呢 在gridView1_ShowingEditor事件中可以实现.这个事件的意思是允许取消激活编辑器 ...
- 【每日一题】【回溯】2021年12月29日-93. 复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" 和 "192.1 ...
- 过压保护芯片,高输入电压(OVP)
PW2606是一种前端过电压和过电流保护装置.它实现了广泛的输入电压范围从2.5V到40V.过电压阈值可在外部编程或设置为内部默认设置.集成功率路径nFET开关的超低电阻确保了更好的性能电池充电系统应 ...
- 10分钟看懂Docker和K8S,docker k8s 区别
10分钟看懂Docker和K8S,docker k8s 区别 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的 ...
- Windows10下python3和python2同时安装(二)python2.exe、python3.exe和pip2、pip3设置
Windows10下python3和python2同时安装(二) python2.exe.python3.exe和pip2.pip3设置 说明:安装安装python3和python2请参考本系列教程( ...