Spring Gateway的入门概述简介

ops/2024/10/8 8:15:41/

1. 为什么要有网关

在微服务中,一般都会把相对独立的业务或者功能划分成一个独立的服务,做到业务或者功能之间的隔离,分开部署。但是在请求到这些正式的服务的时候一般会有一些预前的处理,比如:权限校验,流量控制,灰度发布等。如果这些都在各自的服务中去做,势必会增加这些基础功能的维护成本。总之就是需要有一种前置的组件去做公共的功能逻辑。

2. Spring Gateway

Spring Gateway 是 Spring Cloud 微服务生态下的网关组件,网络层使用了基于非阻塞的 Netty使用异步IO增加了系统的性能。Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,本质上是一个 Spring Boot 应用。

主要的功能
  • 请求路由-最主要的功能
    根据请求本身的属性把请求转发到不同的微服务,使网关能够根据请求的 header、路径、参数、协议等属性将其转发到对应的服务。
  • 服务发现-基础功能
    网关是微服务环境的请求入口。支持服务发现能使网关在转发请求到目标服务时充分利用服务注册中心动态管理服务实例的优势,在配置路由转发的目标地址时也会更加方便
  • 修改请求响应
    网关在收到外部请求,将其转发到目标服务之前,可以根据需求对请求进行修改,比如果更改请求 header、参数等。类似地,也可以在获取到业务服务响应之后,返回给用户前对响应进行修改。
  • 前置业务处理-权限校验
    某些业务场景在处理用户请求时需要先对用户进行权限校验,这部分逻辑也可以由网关来负责。请求在到达网关时,由网关根据请求要访问的业务接口先对用户鉴权,只有校验通过的请求才会转发到对应的服务,而校验不通过的请求会被网关直接拒绝。这样做能够把拒绝无效请求这一步提前到网关这一层,减少无效的流量进入到业务服务。
  • 限流熔断
    网关可以通过添加限流、熔断等机制来对业务服务起保护作用,提升系统整体的可用性。根据业务服务的吞吐量,网关可以限制转发到该服务的请求数量,超出限制的请求直接拒绝或降级,这样可以避免因为过多的请求导致业务服务负载过高的情况。当业务服务异常时,还可以通过熔断的方式到达快速失败的效果。
  • 请求重试
    对于一些幂等的请求,当网关转发目标服务失败时,可以在网关层做自动重试。对于一些多实例部署服务,重试时还可以考虑把请求转发到不同的实例,以提高请求成功的概率。
  • 响应缓存
    当用户请求获取的是一些静态的或更新不频繁的数据时,一段时间内多次请求获取到的数据很可能是一样的。对于这种情况可以将响应缓存起来。这样用户请求可以直接在网关层得到响应数据,无需再去访问业务服务,减轻业务服务的负担。
  • 响应聚合
    某些情况下用户请求要获取的响应内容可能会来自于多个业务服务。网关作为业务服务的调用方,可以把多个服务的响应整合起来,再一并返回给用户。
  • 监控统计
    因为网关是请求入口,所以在网关这一层可以方便地对外部的访问请求做监控和统计,同时还可以对业务服务的响应做监控,方便发现异常情况。
  • 灰度发布
    网关可以用来做服务流量的灰度切换。比如某个业务服务上线了新版本,那可以在网关这一层按照灰度策略,把一部分请求流量切换到新版本服务上,以达到验证新版本业务服务的功能和性能的效果。
  • 异常响应处理
    对于业务服务返回的异常响应,可以在网关层在返回给用户之前做转换处理。这样可以把一些业务侧返回的异常细节隐藏,转换成用户友好的错误提示返回。
  1. 基本原理
    网络:使用了Netty的非阻塞IO请求,提高了性能。
    Gateway 本身是一个 Spring Boot 应用,它处理请求是逻辑是根据配置的路由对请求进行预处理和转发.
  • Route: 一个 Route 由路由 ID,转发 URI,多个 Predicates 以及多个 Filters 构成。Gateway 上可以配置多个 Routes。处理请求时会按优先级排序,找到第一个满足所有 Predicates 的 Route。
  • Predicate: 表示路由的匹配条件,可以用来匹配请求的各种属性,如请求路径、方法、header 等。一个 Route 可以包含多个子 Predicates,多个子 Predicates 最终会合并成一个。
  • Filter: 过滤器包括了处理请求和响应的逻辑,可以分为 pre 和 post 两个阶段。多个 Filter 在 pre 阶段会按优先级高到低顺序执行,post 阶段则是反向执行。Gateway 包括两类 Filter;
    • 全局 Filter: 每种全局 Filter 全局只会有一个实例,会对所有的 Route 都生效。
    • 路由 Filter: 路由 Filter 是针对 Route 进行配置的,不同的 Route 可以使用不同的参数,因此会创建不同的实例

3. 路由配置

路由是 Gateway 的核心构件,不同的路由根据匹配条件可以处理不同类型的请求,并转发到对应的目标服务。一个路由由以下几个属性组成
Id: 路由 ID。
Uri: 转发请求的目标地址。
Order: 顺序(优先级)。
Predicate: 匹配条件。
Metadata: 额外的元数据。

多个 Predicates 会合并成一个聚合的条件。Filters: 路由过滤器。这些过滤器最终会和全局过滤器一起排序处理匹配成功的请求。

Spring Cloud Gateway 本身提供了很多 Predicate 和 Filter 的实现,一些基本的功能可以通过这些现成的 Predicate 和 Filter 配置实现。
4. 实操

代码配置:

java">
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {return builder.routes()//第一个配置.route(r -> r.host("**.abc.org").and().path("/image/png").filters(f ->f.addResponseHeader("X-TestHeader", "foobar")).uri("http://foo.org:80"))// 第二个配置.route(r -> r.path("/image/webp").filters(f -> f.addRequestHeader("X-TestHeader", "baz").addRequestParameter("test-param", "value")).uri("http://bar.org:80").metadata("key", "value")).build();
}

配置文件配置


spring:cloud:  gateway:discovery:locator:enabled: trueroutes:- id: activity-routeuri: lb://activitypredicates:- Path=/activity/**filters:- StripPrefix=1

注意: Gateway默认转发是全路径的,设置StripPrefix=1表示从二级url路径转发,即http://localhost:port/activity/test将会转发到http://{activity}/test

4. 总结

Spring Cloud Gateway 是 Spring Cloud 微服务生态中的 Gateway 组件。作为 Spring Cloud Zuul 的替代,Gateway 采用了性能的更高的 Netty 作为网络层服务器。Gateway 本身提供了很多常用的 Predicates 和 Filters 实现,能满足大部分常见需求。同时 Gateway 也支持 Spring Cloud 生态下其他组件如 Eureka 等的交互,使用起来非常方便。

参考:

https://blog.csdn.net/Extraordinarylife/article/details/115168526


http://www.ppmy.cn/ops/14116.html

相关文章

自建zerotier服务——实现更快速安全的远程连接

zerotier介绍 ZeroTier 是地球上智能可编程的以太网交换机。它允许所有网络设备、虚拟机 (VMs)、容器和应用程序通信,就好像它们都位于同一个物理数据中心或云区域中一样。 功能简介: 全球虚拟网络: ZeroTierOne 可以创建一个全球虚拟的软件…

AI作画算法原理详解

人工智能绘画(AI绘画)算法通常基于深度学习框架,尤其是生成对抗网络(GANs)。这些算法通过训练大量的艺术作品数据,学会生成新的图像,这些图像在风格和内容上与训练数据相似。 生成对抗网络&…

<计算机网络自顶向下> 无连接传输UDP

UDP:User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处: 效率高(不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】)报文段的头部很小(开销小)UDP被用于 流媒…

数据可视化-ECharts Html项目实战(14)

在之前的文章中,我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Html项目实战(…

基于深度神经网络的图像识别技术研究

基于深度神经网络的图像识别技术是目前人工智能领域的研究热点之一,其强大的特征提取和模式识别能力使得图像识别任务取得了显著的进展。以下是对基于深度神经网络的图像识别技术的研究探讨。 首先,深度神经网络通过构建多层次的神经元连接,…

AIGC-stable-diffusion(文本生成图片)+PaddleHub/HuggingFace

功能 stable-diffusion(文本生成图片)PaddleHub,HuggingFace两种调用方式 PaddleHub 环境 pip install paddlepaddle-gpu pip install paddlehub 代码 from PIL import Image import paddlehub as hub module hub.Module(namestable_diffusion)## 保存在demo…

在mac上安装node.js及使用npm,yarn相关命令教程

1、安装node.js 官网:Node.js — Download Node.js 选择需要的版本,点击DownLoad 2、点击继续,直到安装成功。 2.1打开终端输入命令node -v 显示版本号则说明已安装成功 3、全局安装yarn命令 1、sudo npm install --global yarn &#xf…

科技赋能无人零售

科技赋能无人零售,使其具备以下独特优势: 1. 全天候无缝服务 :无人零售店依托科技,实现24小时不间断运营,不受人力限制,满足消费者随时购物需求,尤其惠及夜间工作者、夜猫子及急需购物者&…