Skip to content

SpringCloud_组件基本使用_Gateway

1、微服务网关是什么

微服务网关是一个位于微服务架构前端的服务,作为客户端和后端微服务之间的中介。它的作用是集中处理和管理微服务系统的一些共享的非业务功能,提供统一的入口,同时可以进行路由、转发、过滤、监控等操作。

Gateway 的基本功能

image.png

  1. 路由转发:
    • 网关负责接收客户端的请求,根据配置的路由规则将请求转发到不同的微服务。这有助于实现前后端的解耦,使得微服务可以独立演进。
  2. 流量控制:
    • 网关可以对请求进行流量控制,限制每个微服务的访问频率,防止某个微服务被过度请求而影响整体系统的稳定性。
  3. 熔断保护:
    • 网关可以实现熔断保护,当某个微服务出现故障或超时时,网关可以快速拦截请求,避免请求堆积导致整个系统的崩溃。Sentinel是一种专注于流量控制、熔断降级、系统自适应保护的开源框架,它提供了更丰富的熔断保护功能,因此有些项目选择引入Sentinel来增强熔断保护能力。
  4. 日志监控:
    • 网关通常会记录请求和响应的日志信息,这有助于进行系统的监控和故障排查。业务日志和链路追踪也是重要的监控手段。
  5. 安全认证:
    • 网关可以提供安全认证机制,确保只有经过认证和授权的用户才能访问微服务。这可以通过集成框架(如Spring Security)或使用专门的认证服务来实现。

关于 Gateway 的熔断保护功能的说明

Spring Cloud Gateway自身具备基本的熔断保护机制,可以在配置中设置断路器的一些参数,但相对简单。对于一些更复杂的熔断、限流、降级等场景,可能需要引入专门的框架如Sentinel。

在实际使用中,可以根据具体的需求来选择是否引入Sentinel。如果项目对熔断保护等功能的需求相对简单,Gateway的基本熔断保护足够使用。如果需要更复杂的流量控制和熔断降级策略,引入Sentinel可能会更为合适。

服务网关和流量网关的区别

对于 Nginx 和 Gateway 的两者区别:

流量网关(如Nignx)提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书卸载、Web防火墙、全局流量监控等。

微服务网关(如Spring Cloud Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证等。

流量网关负责南北向流量调度及安全防护,微服务网关负责东西向流量调度及服务治理。

image.png|400

版本区分

  • 2.0.x 版本:引入了基于WebFlux的反应式编程模型,不再使用传统的Servlet API。提供了基本的路由、过滤功能。
  • 2.1.x 版本:增加了对WebSocket的支持,改进了路由断言和过滤器的功能。
  • 2.2.x 版本:引入了更多的路由断言和过滤器,增强了安全性和可管理性。
  • 3.0.x 版本:更新了底层的Spring Boot和Spring Framework的版本,支持最新的功能,例如更好的错误处理和性能优化。

一般说我们常见的是2.2 版本就行

2、Gateway 的搭建和使用

网关的搭建

Spring Cloud Gateway 的配置项

Spring Cloud Gateway的核心概念包括路由(Route)、断言(Predicate)和过滤器(Filter)。

这些概念共同构成了Gateway的基础,用于定义请求的路由规则、请求的匹配条件和请求的处理流程。

路由

路由定义了请求应该被定向到哪个目标服务。每个路由都包含一个唯一的ID、目标URI、一组断言和过滤器。通过配置多个路由,可以实现对请求的动态路由和负载均衡。

spring:
  cloud:
    gateway:
      routes:
        - id: example
          uri: http://example.com
          predicates:
            - Path=/example/**
          filters:
            - StripPrefix=1

上述配置表示将以/example/**路径开头的请求转发到http://example.com,并在转发时去掉路径的第一个段(StripPrefix=1)。

断言

断言定义了请求匹配的条件,当条件满足时,对应的路由规则生效。断言可以基于请求的路径、方法、头部信息等进行匹配。

过滤器

过滤器是处理请求和响应的逻辑的组件,它们可以修改请求和响应,实现一些额外的功能,如添加头信息、修改请求体、进行认证等

spring:
  cloud:
    gateway:
      routes:
        - id: example
          uri: http://example.com
          predicates:
            - Path=/example/**
          filters:
            - StripPrefix=1
            - AddRequestHeader=X-Header=foo

上述配置中的过滤器AddRequestHeader=X-Header=foo表示在转发请求前,向请求头中添加一个名为X-Header的头,其值为foo

Gateway集成 nacos 注册中心实现服务发现

Gateway 整合 Apollo 实现动态路由配置

自定义全局异常处理器

to be contined....


参考