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

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

相关推荐
测试界的小码农14 分钟前
【图数据库实战进阶(01):从零认识 Neo4j,搭建第一个图数据库项目】
数据库·neo4j
软件技术NINI19 分钟前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
x_SpiderMan35 分钟前
搭建Oracle RAC 集群
数据库·oracle
测试界的小码农40 分钟前
【图数据库实战进阶(03):Neo4j 图数据建模实战——节点、关系与属性应该怎么设计?】
数据库·oracle·neo4j
瑞克-桑切斯1 小时前
redis
数据库·redis·缓存
Flynn Liang1 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
freejackman2 小时前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
噢,我明白了2 小时前
JAVA中的一些基础应用知识点
java·开发语言
bksczm2 小时前
InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer
数据库·mysql
花间相见2 小时前
【计算基础|Redis02】【上手】五大数据类型命令逐条实操
数据库·redis·后端