SpringBoot Cloud Gateway

server/2024/10/20 18:52:07/

网关简介

大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?
如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。
在这里插入图片描述
这样的架构,会存在着诸多的问题:

  • 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会
    很蛋疼,完全可以抽出来,放到一个统一的地方去做。
  • 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一
    个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维
    护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个APP,通过抓包发现涉及到了数百个远程 调用,这在移动端下会显得非常低效。
  • 后期如果需要对微服务进行重构的话,也会变的非常麻烦,需要客户端配合你一起进行改造,比如商品服务,
    随着业务变的越来越复杂,后期需要进行拆分成多个微服务,这个时候对外提供的服务也需要拆分成多个,同时需 要客户端配合你进行改造,非常蛋疼
    在这里插入图片描述
    整体架构如下:
    在这里插入图片描述

1.什么是SpringBoot Cloud Gateway

网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。
Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul1.0。相比 Zuul 来说,Spring Cloud
Gateway 提供更优秀的性能,更强大的有功能。
Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构
建成 war 包。
Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如
说安全认证、监控、限流等等。
Spring Cloud Gateway 功能特征

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

思考:

1.为什么前端不能从nacos中获取服务列表直接访问服务,而是需要通过网关完成访问
  前端无法直接通过nacos获取服务列表的原因通常是处于安全和架构的考虑。Nacos是一个服务发现和配置管理平台,用于再分布式系统中注册、发现和配置微服务。然而,将Nacos直接暴露给前端可能存在一些安全风险,因为前端通常是在客户端执行的,直接暴露Nacos可能会暴露微服务的部分信息或者可能导致不必要的访问压力。
  通常,前端与服务器之间需要一个中间件,比如API网关(gateway),用于处理前端的请求并将其转发给后端的微服务。API网关充当了前端与微服务之间的“门面”,它可以隐藏后端微服务的细节,提供安全性、性能优化、负载均衡等功能。通过API网关,前端可以从一个统一的入口点访问后端微服务,而不需要知道每个微服务的具体位置和细节。
  因此,通过API网关作为前端与后端微服务之间的中间层可以更好地管理和控制流量,确保安全性和可靠性,并且使得整个系统更易于扩展和维护。

注意:部分内容转载于图灵课堂徐庶老师
https://www.bilibili.com/video/BV1WF4m1K7eB/?p=2&spm_id_from=pageDriver&vd_source=40b222f0efa6136b87bd742a95975a35


http://www.ppmy.cn/server/4926.html

相关文章

聚观早报 | 华为Pura70系列先锋计划;月之暗面升级Kimi

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月19日消息 华为Pura70系列先锋计划 月之暗面升级Kimi OPPO Find X7将推白色版本 波士顿动力推出人形机器人 v…

JVM之类加载器

1.JVM在哪里 jvm就是java虚拟机,jvm是一个环境(或者可以理解成一个运行在操作系统上的软件) 2.类加载器与双亲委派 JVM 启动的时候,并不会一次性加载所有的类,而是根据需要去动态加载。也就是说,大部分类…

全量知识系统 程序详细设计 定稿 之1 (QA百度搜索 )

Q1从今天开始,我们进入到全量知识系统(简称“全知系统”)的程序详细设计的 整理成文阶段--“定稿”(或“成熟”)阶段(相应的,前一阶段可以称为程序详细设计的“构思”(或“喂养”&am…

前端npm常用命令总结

npm(Node Package Manager)是Node.js的包管理器,用于安装和管理Node.js的依赖库。以下是一份npm命令的总结文档,涵盖了常用的npm命令及其功能: 包相关的 安装和卸载包 npm install :安装指定名称的包。n…

【AI】本地部署可以与文件沟通的GPT:Llama 2 + GPT4All + Chroma

【背景】 还是继续致力于实践可以保护数据隐私的本地化LLM部署。 这次用的是Llama 2 + GPT4All + Chroma实现RAG。 【概念】 基于LangChain模板的各个部分的作用: Llama2-》语言模型管理GPT4ALL-》embeddingChroma-》文件内容的向量存储,作为内部知识库,不需要网络就可以…

vue.runtime.esm.js?c320:4625 [Vue warn]: Failed to resolve directive: lazy

使用图片懒加载插件报错 原因:vue2与懒加载插件默认版本不相容导致的 解决方法:重新安装lazyLoad npm install vue-lazyload1.3.3 --save-dev

esp32-通过wifi使用timelib库同步时间(三)

库的安装 本文基于platformIO,安装较为简单如下图 实例代码 完整代码如下,如果时间获取超时请使用time1.aliyun.com获取时间。 /** Time_NTP.pde* Example showing time sync to NTP time source** This sketch uses the Ethernet library*/#include …

OpenHarmony开发实例:【新闻客户端】

介绍 本篇Codelab我们将教会大家如何构建一个简易的OpenHarmony新闻客户端(JS版本)。应用包含两级页面,分别是主页面和详情页面,两个页面都展示了丰富的UI组件,其中详情页的实现逻辑中还展示了如何通过调用相应接口&a…