官网: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 基本介绍的更多相关文章

  1. Spring Cloud Alibaba-MyShop-项目介绍

    本节视频 [视频]Spring Cloud Alibaba-MyShop-项目介绍 开发环境 操作系统:Windows 10 Enterprise 开发工具:Intellij IDEA 数据库:MyS ...

  2. spring cloud之简单介绍

    以下是来自官方的一篇简单介绍: spring Cloud provides tools for developers to quickly build some of the common patte ...

  3. 微服务SpringCloud之Spring Cloud Config配置中心Git

    微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...

  4. 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client

    简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...

  5. spring cloud 微服务介绍(转)

    一.理解微服务   我们通过软件架构演进过程来理解什么是微服务,软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1. 单体架构 1.1 特点(1)所有的功能集成在一个项目工程 ...

  6. Spring Cloud常用组件介绍

    一.Eureka (Netfix下) 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 二.Spring Cloud Config (Spring下) 配置 ...

  7. 微服务SpringCloud之Spring Cloud Config配置中心SVN

    在回来的路上看到一个个的都抱着花,吃了一路的狗粮,原本想着去旁边的工业园里跑跑步呢,想想还是算了,人家过七夕,俺们过巴西.上一博客学习了Spring Cloud Config使用git作为配置中心,本 ...

  8. 微服务SpringCloud之Spring Cloud Config配置中心服务化

    在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...

  9. SpringCloud之Spring Cloud Stream:消息驱动

    Spring Cloud Stream 是一个构建消息驱动微服务的框架,该框架在Spring Boot的基础上整合了Spring Integrationg来连接消息代理中间件(RabbitMQ, Ka ...

  10. Spring Cloud 入门概括介绍

    出处: 拜托!面试请不要再问我Spring Cloud底层原理 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring ...

随机推荐

  1. @Retryable注解的使用

    @Retryable 前言 在实际工作中,重处理是一个非常常见的场景,比如: 发送消息失败. 调用远程服务失败. 争抢锁失败. 这些错误可能是因为网络波动造成的,等待过后重处理就能成功.通常来说,会用 ...

  2. Huawei OJ 题解 - 1. A + B Problem - Go 参考解答

    # Huawei OJ 题解 - 1. A + B Problem - Go 参考解答## 简介- 详情:http://oj.rnd.huawei.com/problems/1/details- 难度 ...

  3. 阿里技术专家详解 DDD 系列- Domain Primitive

    简介: 关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构.框架和约束,来降低DDD的实践门槛,提升代码质量.可测试性.安全性.健壮性. 作者| ...

  4. xshell登陆,查看中文日志出现乱码

    看到乱码,首先想到的是编码问题 linux默认编码格式是utf-8,windows默认gbk [root@backup]# echo $LANGen.US.UTF-8 使用fie命令可以查看到文件信息 ...

  5. vivo大数据日志采集Agent设计实践

    作者:vivo 互联网存储技术团队- Qiu Sidi 在企业大数据体系建设过程中,数据采集是其中的首要环节.然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的需求与有效的数据采集 ...

  6. 长度最小子数组-LeetCode209 滑动窗口

    力扣:https://leetcode.cn/problems/minimum-size-subarray-sum/ 题目 给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满 ...

  7. CompletionService 使用小结

    本文为博主原创,转载请注明出处: 实现异步任务时,经常使用 FutureTask 来实现:一个简单的示例代码如下: public static void main(String[] args) thr ...

  8. 【PostgreSQL】pgsql编写函数实现批量删除数字结尾的备份表

    执行前: 最终代码: CREATE OR REPLACE FUNCTION "ap"."iter_drop_table_bak"() RETURNS " ...

  9. C#中的进程检测退出事件和座位状态改变事件深入浅出谈谈EventHandler的使用

    关于进程 之前我在启动我的师生对讲的exe的时候,都是直接调用Process类的静态函数Process.Start(System.String AppPath,System.String Argume ...

  10. pulsar集群搭建——生产环境

    pulsar集群搭建 前置条件,需要JDK环境 192.168.1.1 192.168.1.2 192.168.1.3 写入hosts 所有机器都需要执行 $ cat >>/etc/hos ...