解析Spring Cloud Gateway在微服务中的角色


概述-OVERVIEW

来自Spring官网的一段对于Spring Gateway的概述:

This project provides a library for building an API Gateway on top of Spring WebFlux. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.

大意为:

这个项目提供了一个库,用于在Spring WebFlux之上构建API网关。

Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到api,并为它们提供横切关注点,例如:安全性、监控/指标和弹性。三个关键词来概述Gateway的作用:

  • 路由
  • 负载均衡
  • 请求功能增强

Gateway的三个概念

核心概念 描述
Routes(路由) 路由是请求转发的基本模块,它定义了请求的匹配规则和如何转发请求。它包括:唯一id、目标URI以及断言+过滤器。
Predicate(断言) 断言用于定义请求的匹配条件,它决定了请求是否会被路由到相应的目标。断言可以根据请求的路径、请求头、请求方法等进行匹配,如果请求与断言条件匹配成功,则会被路由到相应的目标。
Filter(过滤器) 过滤器用于在请求被路由到目标之前或之后对请求和响应进行处理。过滤器可以用于日志记录、鉴权、请求转换、请求修改等用途。Spring Cloud Gateway提供了一组内置的过滤器,同时也支持自定义过滤器。

NGINX与Gateway

在Spring微服务架构中,请求通常是通过NGINX反向代理服务器路由到网关。下面是请求从NGINX到网关的一般流程:

  1. 客户端发起请求:客户端发送HTTP请求到NGINX服务器。NGINX作为反向代理服务器,监听特定的端口,并将请求转发给后端服务。
  2. NGINX代理配置:NGINX服务器配置文件中定义了代理规则。这些规则指示NGINX如何转发请求。其中,可以将特定的URL或路径匹配到网关的地址。
  3. 网关接收请求:NGINX根据代理规则将请求转发给Spring Cloud网关。Spring Cloud网关是微服务架构中的入口点,它负责路由请求到相应的微服务实例。
  4. 路由规则匹配:Spring Cloud网关收到请求后,将根据预先定义的路由规则进行匹配。这些路由规则指示网关将请求转发到哪个具体的微服务实例。
  5. 转发请求:一旦路由规则匹配成功,Spring Cloud网关将请求转发到目标微服务实例。这可以通过HTTP或负载均衡等技术实现。

Gateway在微服务中的作用

统一入口点

Spring Cloud Gateway作为微服务架构的入口点,所有的外部请求都通过网关进行访问。这样可以集中处理所有的请求,并提供一个统一的访问接口。

路由与负载均衡

Spring Cloud Gateway可以根据预定义的路由规则将请求路由到相应的微服务实例。它支持动态路由配置,可以根据需要进行灵活的路由配置。同时,Gateway还提供负载均衡功能,可以将请求均匀地分发到多个微服务实例中。

安全与认证

Spring Cloud Gateway可以实现对请求的安全性和认证控制。它可以集成各种安全机制,如基于角色的访问控制、JWT验证、OAuth2等,以确保只有经过授权的用户才能访问相应的微服务。

过滤与请求处理

Gateway通过过滤器(filters)提供了丰富的请求处理功能。过滤器可以对请求进行预处理、校验和处理响应等。开发者可以自定义过滤器来实现各种功能,如日志记录、请求转发、参数验证等。

监控和日志

Spring Cloud Gateway提供了丰富的监控和日志功能。它可以记录请求和响应的详细信息,帮助开发者进行故障排查和性能优化。此外,可以集成监控工具和日志收集系统,实现对网关的实时监控和日志分析。

降级与熔断

Gateway可以通过集成熔断器(如Hystrix)来实现微服务的降级和熔断功能。当后端微服务不可用或出现故障时,Gateway可以快速响应降级策略,返回预定义的响应或转发到备用服务,提高系统的可靠性和容错性。

Gateway请求处理

Spring Cloud Gateway通过路由规则来处理请求并将其路由到各个微服务,路由规则定义了请求的匹配条件和目标微服务的路由方式。每个路由规则由一个或多个谓词(Predicates)和一个或多个过滤器(Filters)组成。

  • 谓词(Predicates):谓词用于匹配请求的条件。它可以基于请求的路径、方法、请求头等进行匹配。
  • 过滤器(Filters):过滤器用于对请求进行处理和转换。它可以在请求被路由到目标微服务之前或之后执行一些操作

在JDK 8中,Predicates(谓词)是一个函数式接口,定义在java.util.function包中。它用于表示一个接受一个参数并返回布尔值的函数,常用于条件判断和筛选。Predicates的主要作用是用于对集合、流或其他数据结构中的元素进行筛选、过滤和条件判断。它可以与其他函数式接口(如Function、Consumer等)结合使用,实现更复杂的操作。

以下代码可以配置网关转发请求到各个微服务功能:

spring:
  cloud:
    gateway:
      routes:
        - id: service1_route
          uri: lb://service1
          predicates:
            - Path=/service1/**
		  filters:
            - Name=Weight, Args:
                weight=2
        - id: service2_route
          uri: lb://service2
          predicates:
            - Path=/service2/**
          filters:
            - Name=Weight, Args:
                weight=1
  • id:路由规则的唯一标识符。
  • uri:目标微服务的地址。
  • predicates:谓词条件,用于匹配请求的路径。
  • filters:使用weight控制不同微服务节点的流量比例

解析Spring Cloud Gateway在微服务中的角色_第1张图片

图片引用自:

http://www.ranxiao.top/2019/07/10/spring-cloud-gateway-request-process-flow/

请求分发过程

  1. 客户端从NGINX到达Gateway
  2. Gateway接收请求,根据预先定义的路由规则进行匹配
  3. Gateway的Predicates断言匹配到对应的路由规则,而后到达过滤器执行过滤器逻辑,如:IP黑名单校验、日志记录、鉴权、请求转换、修改等。若无法匹配到对应的路由规则,断言失败,则请求将被拒绝并返回响应的错误响应。
  4. 请求与某个路由规则匹配成功,确定目标服务的地址
  5. Gateway将请求转发到目标服务的地址
  6. 目标服务接收到请求并处理。
  7. 目标服务将响应发送回Spring Cloud Gateway。
  8. Spring Cloud Gateway将响应返回给客户端。

以上,一个客户端请求便从NGINX经过Gateway被负载均衡/分发到了对应的业务层。

请求响应过程

  1. 微服务处理请求:当请求到达微服务后,业务逻辑会根据请求进行处理,生成响应数据。
  2. 返回响应数据:微服务会使用HTTP响应的形式将响应数据发送回Gateway。这通常包括设置HTTP状态码、响应头和响应体等信息。
  3. 网络传输:响应数据通过网络传输回Gateway。这可以通过HTTP协议或其他适用的通信协议来完成。
  4. Gateway接收响应:Gateway会接收到微服务返回的响应数据。它会根据路由规则将响应数据发送给相应的客户端。

解析Spring Cloud Gateway在微服务中的角色_第2张图片

原图请下载:

Gateway请求流程图

引用请标明出处,原创不易!
感谢您阅读到这里,如果您对笔者其他文章感兴趣,可以扫一扫关注笔者的公众号:种颗代码技术树

你可能感兴趣的:(思考,SpringBoot学习,Spring,Cloud,微服务,java)