百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍

ztj100 2024-10-29 18:18 14 浏览 0 评论

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工


目录

  1. 前言
  2. 是什么
  3. WebFlux
  4. 做什么
  5. 为什么
  6. 总结

前言

我们要了解一个事物,从三个维度去了解就行了;是什么做什么为什么

是什么

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

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

WebFlux

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

WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上

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

1)非阻塞式

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

2) 函数式编程端点

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

做什么

网关可以理解为网络关卡,是整个微服务的统一入口(门卫)。

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

Spring Cloud Gateway 功能特征

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  • 动态路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Hystrix 断路器
  • 集成 Spring Cloud DiscoveryClient
  • 易于编写的 Predicates 和 Filters
  • 限流
  • 路径重写

上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路由

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

Spring Cloud Gateway 工作原理

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

Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

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

为什么

我们为什么选择Gateway?

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

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

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

总结

今天老顾就先简单介绍Gateway,下面的文章我们就主要聊下Gateway的基础路由规则,Filter、熔断和限流等。谢谢!!!


---End---

最近老顾上传了微服务网关的分享课程,请大家多多支持

推荐阅读

1、API网关在微服务架构中的应用,这一篇就够了

2、学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)

3、Lambda用在哪里?几种场景?

4、为什么会出现Lambda表达式,你知道吗?

5、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用

6、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构

7、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足

8、阿里P7二面:聊聊零拷贝的原理

9、秒杀系统的核心点都在这里,快来取

10、你了解如何利用token方式实现分布式Session吗?

11、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂

12、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调

13、企业实战Redis全方面思考,你思考了吗?

14、面试题:Thread的start和run的区别

15、面试题:什么是CAS?CAS的作用以及缺点

16、如何访问redis中的海量数据?避免事故产生

17、如何解决Redis热点问题?以及如何发现热点?

18、如何设计API接口,实现统一格式返回?

19、你真的知道在生产环境下如何部署tomcat吗?

20、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

21、分享大厂分布式唯一ID设计方案,快来围观

22、你想了解一线大厂的分布式唯一ID生成方案吗?

23、你知道如何处理大数据量吗?(数据拆分篇)

24、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

25、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

26、你了解大型网站的页面静态化吗?

27、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

28、你知道怎么解决DB读写分离,导致数据不一致问题吗?

29、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

30、你真的知道怎么使用缓存吗?

31、如何利用锁,防止缓存击穿?重构思想的重要性

32、海量订单产生的业务高峰期,如何避免消息的重复消费?

33、你知道如何保障生产端100%消息投递成功吗?

34、微服务下的分布式session该如何管理?

35、阿里二面:filter、interceptor、aspect应如何选择?很多人中招

36、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里

37、阿里二面:CDN缓存控制原理,看看能不能难住你

相关推荐

Whoosh,纯python编写轻量级搜索工具

引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

如何用Python实现二分搜索算法(python二分法查找代码)

如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

路径扫描 -- dirsearch(路径查找器怎么使用)

外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

从零开始学习 Python!2《进阶知识》 Python进阶之路

欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

一、背景介绍...

Python之txt数据预定替换word预定义定位标记生成word报告(四)

续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

假期苦短,我用Python!这有个自动回复拜年信息的小程序

...

Python——字符串和正则表达式中的反斜杠('\')问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

Python re模块:正则表达式综合指南

Python...

Python中re模块详解(rem python)

在《...

python之re模块(python re模块sub)

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

Zabbix监控系统系列之六:监控 mysql

zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

mysql系列之一文详解Navicat工具的使用(二)

本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

取消回复欢迎 发表评论: