微服务网关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就是一个流量的统一入口,所以它能做很多事情,如路由转发、负载均衡、统一鉴权和限流等保护服务的机制。

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

相关推荐
Amarantine、沐风倩✨17 分钟前
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
java·物联网·音视频·webrtc·html5·视频编解码·七牛云存储
dazhong201243 分钟前
PLSQL 客户端连接 Oracle 数据库配置
数据库·oracle
路在脚下@1 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader3 小时前
深入解析 Apache APISIX
java·apache
了一li3 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
码农君莫笑3 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word