微服务网关Spring Cloud Gateway有什么作用?

一、背景

现在的spring cloud生态中,spring cloud gateway是一个非常重要的组件。它是一款API网关服务,在微服务架构中扮演了关键角色,它为微服务架构中的请求提供了路由、转发和过滤 的功能。此外,还提供了负载均衡、限流和鉴权的功能。

Spring Cloud Gateway使用了WebFlux框架,它使用了响应式编程模型,主要通过reactor提供的异步非阻塞线程模型。这意味着,spring cloud gateway可以利用较少的线程处理更多的并发请求,在高并发场景下表现更好,提供系统的资源利用率。

其实网关的作用就是为整个系统提供统一入口,这就意味着所有的流量都要先经过网关,然后再由网关转发出去。所以,我们一般建议网关中不要有业务逻辑,网关的主要功能那就是流量的转发

二、Gateway的作用

1.路由转发

在spring cloud gateway中我们可以自定义路由,将请求根据不同的路径或条件转到相应的下游服务中去。这对整个微服务架构中的服务管理来说非常简单、高效。

配置规则如下:

java 复制代码
#当请求以order开始,则会被路由到order-service这个服务集群
spring:
  cloud:
    gateway:
      routes: # 路由
      - id: order-service
        uri: lb://order-service
        predicates: # 断言
        - Path=/order/**
      - id: customer-service
        uri: lb://customer-service
        predicates: # 断言
        - Path=/customer/**
2.负载均衡

因为网关是做路由转发的,所以在网关中可以很方便的实现负载均衡。Spring Cloud官方默认的是采用spring-cloud-loadbalancer组件,如上面的代码中uri: lb://customer-service, 就是采用默认的负载均衡算法,请求到customer-service集群。

3.统一鉴权

在gateway中我们可以集成spring security和JWT等安全框架,进行统一的登录和鉴权。在网关中任何一个请求,我们都会先判断当前请求的用户是否已经登录,如果没有登录则会路由到登录页面进行登录,如果已经登录了则会继续鉴权,判断当前用户是否有访问该接口的权限,如果鉴权成功则会将请求路由给对应的服务进行处理。

4.流量的过滤

就像之前的统一鉴权一样,我们也可以基于网关做一些流量的过滤,比如一些恶意流量的过滤、黑名单的过滤。

5.限流降级

在网关中我们还可以做限流降级,目前官方推荐我们使用resilience4j组件来进行限流。这样我们就可以在网关层面进行流量的统一管控,从而避免大量的流量压垮我们的服务集群。

6.解决跨域的问题

在微服务架构中,我们的服务通常都会分布在不同的域中。Spring Cloud Gateway提供了跨越请求支持,使得不同域中的服务可以进行安全的通讯。

三、总结

综上所述,spring cloud gateway就是一个流量的统一入口,所以它能做很多事情,如路由转发、负载均衡、统一鉴权和限流等保护服务的机制。

但是,另外一方面作为所有流量的入口,网关会处理大量的请求,容易成为我们系统的瓶颈。所以,我们需要对资源进行合理的分配,做好网关应用的监控,如发现异常需及时进行处理。

相关推荐
阿沐沐,2 分钟前
PowerShell 里改了 config.toml,Codex CLI 仍用旧值:先分清该改哪一层
java·服务器·数据库·人工智能·ai·ai编程
杨丰玮4185 分钟前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(二)
java·游戏·计算机外设
Rain的Java大神之路9 分钟前
如何避免订单重复提交
java·redis·后端·面试·架构·rabbitmq·rocketmq
JacksonMx40 分钟前
企业级幂等方案
数据库·spring boot·spring·oracle
ps酷教程1 小时前
解析自定义数据
java
wuminyu1 小时前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
Lucifer三思而后行1 小时前
我准备写 26 篇文章,带 DBA 系统学一遍 AI
数据库·人工智能·dba
for_ever_love__1 小时前
SQL学习: SQL入门与DDL
数据库·sql·学习
桦说编程1 小时前
深入理解 FutureTask 状态机——从契约到实现
java·后端·性能优化