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

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

相关推荐
程序员岳焱17 分钟前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
都叫我大帅哥25 分钟前
AQS(AbstractQueuedSynchronizer)深度解剖:从“奶茶店排队”到源码级设计哲学
java
斯奕sky_small-BAD30 分钟前
C++ if语句完全指南:从基础到工程实践
java·开发语言·php
洛神灬殇30 分钟前
【LLM大模型技术专题】「入门到精通系列教程」基于ai-openai-spring-boot-starter集成开发实战指南
网络·数据库·微服务·云原生·架构
云之渺31 分钟前
125java
java
都叫我大帅哥32 分钟前
Java ReentrantLock:从“舔狗式等待”到源码级征服指南
java
程序员岳焱39 分钟前
Java 高级泛型实战:8 个场景化编程技巧
java·后端·编程语言
小鸡脚来咯41 分钟前
redis分片集群架构
数据库·redis·架构
钢铁男儿1 小时前
C# 类和继承(扩展方法)
java·servlet·c#
饮长安千年月1 小时前
JavaSec-SpringBoot框架
java·spring boot·后端·计算机网络·安全·web安全·网络安全