微服技术栈之Spring could gateway

0 前言

之前使用到的gateway技术栈 ,光靠记忆可能没有记住那么多的,gateway当今比较主流的网关技术栈了。说到gateway,不得不提及Zuul,而Zuul已经被淘汰了。

1 概述

Could全家桶有个很重要的组件就是网关,在1.X版本中都是采用Zuul网关,但是在2.X版本中,Zuul的升级一直跳票,Spring Could最后自己研发Gateway,那就是Spring Could Gateway。
在这里插入图片描述
Springcloud Gateway是 Spring cloud 的一个全新项目,基于 Spring 5.0+spring Boot 2.0 和 Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式。
Springcloud Gateway 作为 Soring Cloud 生态系统中的网关,目标是替代,Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuyl 2.0以最新高性能版本进行集成,仍然还是使用的zuul1.x非Reactor模式的老版本。而为了提升网关的性能,springcloud Gateway是基于Webflux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway的目标提供统一的路由方式且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。如下图所示,所有的前段请求api都经过网关,网关是所有微服务的入口,而网关需要Nginx做代理,Nginx可以根据多个访问路径做成负载均衡调用。

在这里插入图片描述
一方面因为Zuu11.0已经进入了维护阶段,而且Gateway是SpringCloud团队研发的,是亲儿子产品,值得信赖。
而且很多功能Zuul都没有用起来也非常的简单便捷。
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netfix早就发布了最新的 Zuul 2.x,但 Spring Cloud 貌似没有整合计划。而且Netflix相关组件都宣布进入维护期;不知前景如何?
多方面综合考虑Gateway是很理想的网关选择。

2. 特性

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

2.1 gateway和Zuul1的区别

1、Zuu 1.x,是一个基于阻塞//0的 APl Gateway
2.Zuul1.x基于Serl@t 2.5使用阻塞架构它不支持任何长连接(如 Websocket) zuul 的设计模式和Nginx较像,每次 I0 操作都是3.从Zuul2工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx 用C++ 实现,Zuul 用 Java 实现,而 JVM本身会有第一次加载较慢的情况,使得Zuu的性能相对较差。Zuul 2.x理念更先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。 Zuul 2.x的性能较 Zuul1x有较大提升3.在性能方面,根据官方提供的基准测试,Spring Cloud Gateway的 RPS(每秒请求数)是Zuul 的 1.6 倍。
4.Spring Cloud Gateway建立在 Spring framework 5、Project Reactor 和 Spring Boot2之上,使用非阻塞 API.
5.Spring Cloud Gateway 还 支持 WebSocket,并且与Spring紧密集成拥有更好的开发体验

2.2 Zuul1.X模型

Springcloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Servlet I/O处理模型。

Servlet的生命周期?servlet由servlet container进行生命周期管理。
container启动时构造servlet对象并调用servlet init0)进行初始化。
container运行时接受请求,并为每个请求分配一个线程(一般从线程池中获取空闲线程)然后调用service0)
container关闭时调用servet destory0)销毁servlet;
在这里插入图片描述
上述模式的缺点:
servlet是一个简单的网络!0模型,当请求进入servlet container时,servlet container就会为其绑定一个线程,在并发不高的场景下这种模型是适用的。但是一旦高并发(比如抽风用jemeter压),线程数量就会上涨,而线程资源代价是昂贵的(上线文切换,内存消耗大)严重影响请求的处理时间。在一些简单业务场景下,不希望为每个request分配一个线程,只需要1个或几个线程就能应对极大并发的请求,这种业务场景下seriet模型没有优势。
所以zuu11.X是基于serviet之上的一个阻塞式处理模型,即spring实现了处理所有request请求的一个。servlet(Dispatcherservlet)并由该servlet阳塞式处理处理。所以Springcloud Zuul无法摆脱servlet模型的弊端。

2.3 WebFlux

传统的Web框架,比如说:struts2,springmvc等都是基于Servet APl与Servlet容器基础之上运行的。
但是在Servlet3,1之后有了异步非阳塞的支持。而Webflux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的,相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上。非阻塞式+函数式编程(Spring5必须让你使用java8)
Spring Webflux 是 Spring 5.0引入的新的响应式框架,区别于 Spring MVC,它不需要依赖Servlet AP!,它是完全异步非阻塞的,并且基于 Reactor 来实现响应式流规范。

gateway原理介绍

3.1 gateway工作流

前置知识
路由就是构建网关额基本模块,它由ID,目标URI,一系列的断言和过滤器组成的,如果断言为true则匹配该路由。
断言(Predicate): 参考的是Java8的iava.util.function.Predicate
开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
过滤器(Filter):指的是Spring框架中Gateway Filter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改

总体
在这里插入图片描述
web请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。predicate就是我们的匹配条件;
而filter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由了。
在这里插入图片描述

客户端向 Spring Cloud Gateway 发出请求,然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 GatewayWeb Handler.
Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前("pre”)或之后(“post”)执行业务罗辑,
Filter在 “pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

3.2 集成配置

建立pom.xml
在这里插入图片描述
需要注意:移除web依赖,去除spring-boot-starter-web依赖,gateway不需要web,否则报错 。
在这里插入图片描述

配置yml文件
在这里插入图片描述
配置成功后启动gateway和微服务。
在这里插入图片描述
通过编码的方式配置路由规则,如下图所示:
在这里插入图片描述

3.2 gateway实现负载均衡

通过微服务名实现动态路由。网关与微服之间的架构如如下所示。
默认情况下gateway会根据注册中心的服务列表,以注册中心上的微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。
在这里插入图片描述
具体配置,就是把IP地址改成了服务名,即在注册中心中的微服名称,如下图所示:
在这里插入图片描述

3.3 Predicate的使用

首先配置时间。
在这里插入图片描述
Cookie级别的配置。不带Cooki,和带Cookie
Cookie Route Predicate需要两个参数,路由规则会通过获取对应的 Cookie name个是Cookie name ,一个是正则表达式。
值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上则不执行。
在这里插入图片描述
请求头配置
在这里插入图片描述
Host路由断言配置。
在这里插入图片描述
验证配置是否成功如下:
在这里插入图片描述

3.4 Filter的使用

veb请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。predicate就是我们的匹配条件:而filter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由了。
路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。Spring Cloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生。
由于官方给了过滤器有三十多种配置,本文不可能一一去描述,管网已经存在的配置描述本文略过,而是进行自定义的过滤器配置。
自定义全局GlobalFilter,注意实现GlobalFilter和Ordered两个接口。
在这里插入图片描述

结束语

微服组件网关已经结束了,下面就开始学习分布式事务的组件了Seata,是阿里巴巴的分布式事务的解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上课啦 | 2月17日软考高项【5月备考班】

相关文章推荐 福利:【软考-电子书】赠送 | 信息系统项目管理师教程 软考证书以考代评评定的职称是什么?聘任步骤? 添加图片注释,不超过 140 字(可选) 软考 高 项 课程:2月17日开课 | 软考-高…

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程(Pandavan) 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而,原厂固件的功能相对有限,难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能,还能通过第三方固…

【电脑】u盘重装win7

u盘必须8GB以上 1. CPU型号 首先查看CPU的型号看看到底能不能装win7 2. 下载光盘映像文件 网址 看电脑是多少位的机器(32位下载x86 64位下载x64) 一共是这么多个版本按需下载对应的版本 电脑小白推荐无脑下载旗舰版 将链接复制到迅雷进行下载 3. 下载软碟通 网址 下…

wps或office的word接入豆包API(VBA版本)

直接上代码,由于时间匆忙,以后写个详细的教程 #If VBA7 ThenPrivate Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As…

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器(示例) 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…

USB Flash闪存驱动器安全分析(第一部分)

翻译原文链接:Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结:文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行,他在2022年初发现了几个安全漏…

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用,提高可维护性。 —这个有两个方案:一个是二次封装一个是实例化。(设置一些公共的参数,然后进行请求) 为什么可以解决代码的复用: 这是…

DeepSeek助力:打造属于你的GPTs智能AI助手

文章目录 一、环境准备1.安装必要的工具和库2. 选择合适的开发语言 二、核心技术选型1. 选择适合的AI框架 三、功能实现1. 文本生成与对话交互2. 代码生成与自动补全3. 数据分析与报告生成 四、案例实战1. 搭建一个简单的聊天机器人2. 创建一个代码生成器 五、总结与展望1. 当前…

网络基础 【UDP、TCP】

1.UDP 首先我们学习UDP和TCP协议 要从这三个问题入手 1.报头和有效载荷如何分离、有效载荷如何交付给上一层的协议?2.认识报头3.学习该协议周边的问题 UDP报头 UDP我们先从示意图来讲解,认识报头。 UDP协议首部有16位源端口号,16位目的端…

推荐的、好用的线性稳压器

前言 内容来自B站up主-工科男孙老师的视频 视频内容:测评网友推荐的线性稳压器,以及这些线性稳压器的应用场景。视频链接:除了1117,还有哪些更好用的线性稳压器? 1、1117的缺点 体积太大,浪费主板的空间不…

2025最新出炉--前端面试题九

文章目录 1. Vue 和 React 的使用经验对比2. vue 的 computed 和 watch 有什么区别3. v-model 平时你都怎么使用4. import 和 require 之间什么区别5. 说一下 vue 的缓存组件6. vue3.0 为什么使用 proxy 拦截数据7. 能讲讲 vuex 吗, 刷新页面会怎样8. http1.1 和 http2.0 之间什…

rancher on k3s

本次部署采用3节点的etcd服务2master节点的k3s使用helm部署的ranchervip(keepalived) 一、安装etcd服务 # 准备 3 个节点部署 etcd cd /hskj/tmp wget https://github.com/etcd-io/etcd/releases/download/v3.3.15/etcd-v3.3.15-linux-amd64.tar.gz tar xzvf etcd-v3.3.15-…

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者:来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型,以及其与 LLM(Large Language Model)的异同和协同关系。接着…

无人机图像拼接数据的可视化与制图技术:以植被监测为例

无人机技术在生态环境监测中的应用越来越广泛,尤其是在植被监测领域。通过无人机获取的高分辨率影像数据,结合GIS技术,可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例,详细讲解无人机图像拼接数据的可视…

ONES 功能上新|ONES Copilot、ONES TestCase、ONES Wiki 新功能一览

ONES Copilot 支持基于当前查看的工作项相关信息,利用 AI 模型,在系统中进行相似工作项的查找,包括基于已关联工作项的相似数据查找。 应用场景: 在查看工作项时,可利用 AI 模型,基于语义相似度&#xff0c…

基于带通滤波的camera脏污检测算法可以完全替代imatest

1.概要 脏污检测算法,基于opencv c实现,便于模组厂快速集成到软件工具中,适用于camera模组厂脏污拦截,特别是对浅脏污具备很好的定位效果;便于画质评价工程师了解camera模组制程的问题提出改善方向。 2.技术介绍 下图…

后勤数据源定制主控室

场景:在学习了解后勤数据源过程中,看到觉得有用的note,分享给大家。 1779063 - 常见问题:关于 LO 数据提取 - 定制主控室(事务 LBWE) 1.问题: 是否需要为每个应用程序组件下的每个数据源添加池…

云原生AI Agent应用安全防护方案最佳实践(上)

当下,AI Agent代理是一种全新的构建动态和复杂业务场景工作流的方式,利用大语言模型(LLM)作为推理引擎。这些Agent代理应用能够将复杂的自然语言查询任务分解为多个可执行步骤,并结合迭代反馈循环和自省机制&#xff0…

三格电子——TCP转ProfibusDP网关使用场景

型号: SG-TCP-Profibus(M) 感兴趣可以TB 搜 三格电子 使用场景: ModbusTCP Client 通过 ModbusTCP 控制 Profibus DP 接口设备。 ModbusTCP 侧支持03H、04H、10H 功能码,只支持 1 个client连接; ProfibusDP 侧支持 DP v0。 P…

剑指offer第2版:搜索算法(二分/DFS/BFS)

查找本质就是排除的过程,不外乎顺序查找、二分查找、哈希查找、二叉排序树查找、DFS/BFS查找 一、p39-JZ3 找出数组中重复的数字(利用特性) 数组中重复的数字_牛客题霸_牛客网 方法1:全部排序再进行逐个扫描找重复。 时间复杂…