官网: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. Go map 竟然也会发生内存泄露?

    Go 程序运行时,有些场景下会导致进程进入某个"高点",然后就再也下不来了. 比如,多年前曹大写过的一篇文章讲过,在做活动时线上涌入的大流量把 goroutine 数抬升了不少,流 ...

  2. AR Engine光照估计能力,让虚拟物体在现实世界更具真实感

    AR是一项现实增强技术,即在视觉层面上实现虚拟物体和现实世界的深度融合,打造沉浸式AR交互体验.而想要增强虚拟物体与现实世界的融合效果,光照估计则是关键能力之一. 人们所看到的世界外观,都是由光和物质 ...

  3. K8S kubesphere安装mysql

    原先我们使用Docker按照mysql时候的命令 docker run -p 3306:3306 --name mysql-01 \ -v /mydata/mysql/log:/var/log/mys ...

  4. C温故补缺(十四):内存管理

    内存管理 stdlib库中有几个内存管理相关的函数 序号 函数和描述 1 void *calloc(int num, int size);在内存中动态地分配 num 个长度为size 个字节 的连续空 ...

  5. MySQL进阶实战2,那些年学过的事务

    @ 目录 一.MySQL服务器逻辑架构 二.并发控制 1.读写锁 2.锁粒度 3.表锁 4.行级锁 三.事务 1.原子性(atomicity) 2.一致性(consistency) 3.隔离性(iso ...

  6. WeakHashMap 和 HashMap 的区别是什么,何时使用?

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在之前的文章里,我们聊到了 Java 标准库中 HashMap 与 LinkedH ...

  7. 漫谈计算机网络:应用层 ----- 从DNS域名解析到WWW万维网再到P2P应用

    2022-12-04 18:31:01 纪念一下博主的<漫谈计算机网络>连载博客 浏览量破500了! 今天更新完结篇! 面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽 ...

  8. Springboot优雅进行字段检验

    Springboot优雅进行字段检验 1.Controller VS Service 推荐与业务无关的放在controller层中进行校验,而与业务相关的放在service层中校验. 2.常用校验工具 ...

  9. ClickHouse数据副本引擎

    我的gitee地址:https://gitee.com/ddxygq/bigdata-technical-pai ,相关文章都放到这个仓库里了. 只有 MergeTree 系列里的表可支持副本: Re ...

  10. 判断条件为NULL

    在ASCII码表里NULL的二进制位0.所以NULL作为判断条件时,表示为假的意思. ASCII表               二进制                       字符         ...