参考自:

  • Spring cloud gateway 详解和配置使用
  • 【尚学堂】SpringCloudGateway微服务网关组件完整版实战

感谢分享!

1、简介

1)网关是怎么演化来的

单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务

2)网关的基本功能

  • 网关核心功能是路由转发,因此不要有耗时操作在网关上处理,让请求快速转发到后端服务上
  • 网关还能做统一的熔断、限流、认证、日志监控等

可以和服务注册中心完美的整合,如:Eureka、Consul、Nacos

3)关于Spring Cloud Gateway

在SpringCloud微服务体系中,有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul,那就是SpringCloud Gateway

网上很多地方都说Zuul是阻塞的,Gateway是非阻塞的,这么说是不严谨的,准确的讲Zuul1.x是阻塞的,而在2.x的版本中,Zuul也是基于Netty,也是非阻塞的,如果一定要说性能,其实这个真没多大差距。

而官方出过一个测试项目,创建了一个benchmark的测试项目:spring-cloud-gateway-bench,其中对比了:

  • Spring Cloud Gateway
  • Zuul1.x
  • Linkerd
Proxy Avg Latency Avg Req/Sec/Thread
gateway 6.61ms 3.24k
linkered 7.62ms 2.82k
zuul 12.56ms 2.09k
none 2.09ms 11.77k

还有一点就是Gateway是基于 WebFlux 的。这里引出了WebFlux名词,那什么是WebFlux?

WebFlux 介绍

  • 左侧是传统的基于Servlet的 Spring Web MVC 框架,传统的Web框架,比如说:struts2,springmvc 等都是基于 Servlet API 与 Servlet 容器基础之上运行的,在 Servlet3.1 之后才有了 异步非阻塞 的支持。

  • 右侧是5.0版本新引入的基于 Reactive Streams 的Spring WebFlux框架,从上到下依次是 Router FunctionsWebFluxReactive Streams 三个新组件。

  • Router Functions: 对标@Controller,@RequestMapping等标准的Spring MVC注解,提供一套函数式风格的API,用于创建Router,Handler和Filter。

  • WebFlux: 核心组件,协调上下游各个组件提供响应式编程支持。

  • Reactive Streams: 一种支持背压(Backpressure)的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor

  • 在Web容器的选择上,Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux<DataBuffer>格式,以便进行统一处理

  • 值得一提的是,除了新的Router Functions接口,Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller。和传统的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse。

根据官方的说法,webflux主要在如下两方面体现出独有的优势:

  1. 非阻塞式

其实在servlet3.1提供了非阻塞的API,WebFlux提供了一种比其更完美的解决方案。使用非阻塞的方式可以利用较小的线程或硬件资源来处理并发进而提高其可伸缩性

  1. 函数式编程端点

老生常谈的编程方式了,Spring5必须让你使用java8,那么函数式编程就是java8重要的特点之一,而WebFlux支持函数式编程来定义路由端点处理请求。

4)Spring Cloud Gateway 功能特征

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

上图中是核心的流程图,最主要的就是RoutePredicatesFilters 作用于特定路由。

  • Route:路由是网关的基本构件。它由ID、目标URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。
  • Predicate:参照Java8的新特性Predicate。这允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
  • Filter:可以在发送下游请求之前或之后修改请求和响应。

我们为什么选择Gateway?

一方面因为Zuul已经进入了维护阶段,而且Gateway是SpringCloud团队研发的,是亲儿子产品,值得信赖。而且很多功能Zuul都没有;用起来也非常的简单便捷。

Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix 早就发布了最新的 Zuul 2.x,但 Spring Cloud 貌似没有整合计划。而且Netflix相关组件都宣布进入维护期;不知前景如何?

多方面综合考虑Gateway是很理想的网关选择。

Spring Cloud Gateway 工作原理

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

Filter在“pre”类型的过滤器可以做参数校验权限校验流量监控日志输出协议转换等,

在“post”类型的过滤器中可以做响应内容响应头的修改日志的输出流量监控等有着非常重要的作用。

核心逻辑就是 路由转发执行过滤器链

在上面的处理过程中,有一个重要的点就是讲请求和路由进行匹配,这时候就需要用到predicate,它是决定了一个请求走哪一个路由。

【SpringCloud 2021.0.0】12、路由网关Gateway之简介 (spring-boot 2.6.3)相关推荐

  1. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

  2. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

  3. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  4. SpringCloud实战(五)-路由网关(zuul)

    本文是SpringCloud实战(五)-路由网关(zuul),若要关注前文,请点击传送门: SpringCloud实战(四)-断路器(Hystrix) 前文我们介绍了Hystrix断路器.在平常工作中 ...

  5. SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)

    什么是 Spring Cloud Gateway? Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Re ...

  6. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  7. 企业级 SpringCloud 教程 (五)路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  8. SpringCloud Alibaba 微服务 — 微服务网关 Gateway

    一.Spring Cloud Gateway 简介 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.x.Spring Boot 2.x.Spring WebFl ...

  9. 健康管理系统3.0(微信小程序 + JQuery + html + 爬虫 + MySQL + spring boot 只用于学习,不可商用)

    在健康管理系统2.0得基础上新增了一些功能: 健康管理系统2.0:https://blog.csdn.net/h_j_c_123/article/details/112853754 管理端基本保持不变 ...

  10. 健康管理系统2.0(微信小程序 + JQuery + html + 爬虫 + MySQL + spring boot 只用于学习,不可商用)

    这是做的第二个版本的健康管理系统,相对于第一个版本的系统页面更加的优化和友好,下面我们先看一下管理系统页面的演示,本次采用的是动态图gif演示. 管理系统一共分为以下几个模块:用户登录.后台首页.用户 ...

最新文章

  1. Hibernate two table same id
  2. win10下如何设置开机自启动
  3. 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出
  4. js笔记(二)数组、对象、this
  5. 天池 在线编程 有效的字符串
  6. SpringMVC默认访问路径配置
  7. Oracle-day03 上
  8. springcloud服务网关-gateway
  9. CMS内容管理系统可行性分析
  10. 如何在Win10中运行Win7小游戏 扫雷,蜘蛛纸牌,红心大战,纸牌,空当接龙?
  11. curl模拟GET/POST请求、ab压力测试
  12. python解决八数码问题_python解决八数码问题
  13. 树莓派4B+Intel神经计算棒(Stick2)+YoloV5可行性考察报告
  14. chromium双核浏览器实现
  15. 苹果CMS接入GOGO支付实现个人收款回调详细教程(附插件)
  16. ndo2db: mysql_error: ‘Unknown column ‘importance’ in ‘field list”
  17. IDEA中的TODO使用和Debug史诗级详细使用说明
  18. NAR:MicrobiomeAnalyst微生物组分析师——统计、可视化和元分析微生物组数据的网页工具
  19. 计算机网络base,计算机网络中的术语100Base-TX/FX指的是什么?
  20. 配置mpls vpn基本组网-hub and spoke

热门文章

  1. oracle保留小数位数
  2. 一篇文章学会ICP许可证如何年检
  3. @async 注解使主线程不等待
  4. 你及格了吗?史上最难云原生冷知识大挑战真题解析
  5. pcie读写ddr_DDR4内存与PCIe 双杀打造4秒闪开的五星神机
  6. 配置Microsoft Visual SourceSafe 2005的Internet访问
  7. AutoJs学习-实现悬浮网络监视器
  8. 抓包工具 - HttpWatch(功能详细介绍)
  9. eclipse jdk版本不一致 build path specifies execution environment j2se-1.5......
  10. java 水晶按钮图片_JAVA GUI 开发---水晶图片按钮