SpringBoot Cloud Gateway

网关简介

大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?

如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。

这样的架构,会存在着诸多的问题:

  • 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会
    很蛋疼,完全可以抽出来,放到一个统一的地方去做。
  • 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一
    个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维
    护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个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

相关推荐
尘浮生1 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
小白不太白9506 分钟前
设计模式之 模板方法模式
java·设计模式·模板方法模式
Tech Synapse8 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴8 分钟前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
xoxo-Rachel14 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
乌啼霜满天24916 分钟前
JDBC编程---Java
java·开发语言·sql
色空大师29 分钟前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)29 分钟前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言