微服务架构-网关:Spring Cloud Gateway入门

引言

书接上文,网关作为微服务系统中不可或缺的一部分,java的后端框架有SpringCloud Gateway ,Zuul,本篇文章简单介绍spring cloud gateway,后续会有其他文章详细介绍原理和实践。

一、Spring Cloud Gateway的核心概念

1. 路由(Route)

路由是网关的基本单元,定义请求如何被转发到目标服务,包含以下关键属性:

  • ID:路由的唯一标识符,用于区分不同规则。
  • URI:目标服务地址,支持静态(如http://localhost:8080)或动态(如lb://userservice基于服务发现的负载均衡)配置。
  • 断言(Predicates):匹配请求的条件集合,决定是否应用该路由规则。
  • 过滤器(Filters):在请求转发前后执行的处理逻辑,如修改请求头、限流等。

示例配置

spring:
  cloud:
    gateway:
      routes:
        - id: user_route
          uri: lb://userservice
          predicates:
            - Path=/api/user/**
          filters:
            - AddRequestHeader=X-User-ID, 123
2. 断言(Predicate)

断言基于Java 8的Predicate接口实现,用于验证HTTP请求是否符合路由规则。支持多种匹配条件:

  • 路径匹配:如Path=/api/**匹配以/api开头的请求。
  • 请求头匹配:如Header=X-Token, \d+验证请求头中的令牌是否为数字。
  • 请求方法匹配:如Method=GET仅允许GET请求。

断言支持逻辑组合(AND/OR),实现复杂路由逻辑。

3. 过滤器(Filter)

过滤器分为两类:

  • 全局过滤器(GlobalFilter):作用于所有路由,如鉴权、日志记录。
  • 路由过滤器(GatewayFilter):仅作用于特定路由,如AddRequestHeader添加请求头。

过滤器链按顺序执行,分为Pre-Filter(转发前处理)和Post-Filter(响应返回后处理)。

二、Spring Cloud Gateway的工作原理

1. 整体处理流程

Spring Cloud Gateway基于WebFlux框架,采用异步非阻塞模型,底层依赖Netty实现高性能通信。其请求处理流程如下:

  1. 请求接收:客户端请求被HttpWebHandlerAdapter封装为ServerWebExchange对象,构建网关上下文。
  2. 路由匹配DispatcherHandler调用RoutePredicateHandlerMapping,遍历所有路由规则,通过断言匹配请求。
  3. 过滤器链执行:匹配成功后,FilteringWebHandler按顺序执行全局和路由过滤器:
    • Pre-Filter阶段:执行鉴权、限流、请求头修改等逻辑。
    • 代理请求:通过NettyRoutingFilter转发请求到目标服务。
    • Post-Filter阶段:处理响应数据(如压缩、日志统计)。
  4. 响应返回:响应数据经过过滤器处理后返回客户端,完成请求生命周期。
2. 高性能架构设计
  • 响应式编程模型:基于Reactor库实现异步非阻塞I/O,避免线程阻塞,提升并发能力。
  • Netty服务器:采用事件驱动模型,支持高吞吐量和低延迟,适合网关的高并发场景。
  • 动态路由更新:结合服务发现(如Nacos、Eureka),实时感知服务实例变化,动态调整路由策略。
3. 核心组件协作
  • RouteLocator:加载路由配置(静态文件或动态源如数据库)。
  • FilterProcessor:管理过滤器链的执行顺序与逻辑。
  • LoadBalancerClient:实现服务名的负载均衡(如轮询、随机策略)。

三、典型应用场景

  1. 统一鉴权与安全:网上很多文章说使用GlobalFilter或defaultFilter实现鉴权,但实际使用场景中,GlobalFIlter无法拦截静态资源的请求,SCG基于webflux构建,一个请求的大致处理过程如下:
    请添加图片描述
    从上图可以看到,请求会先经过spring webflux 的webfilter,webfilter会拦截所有请求,包括静态资源请求;如果使用统一的鉴权服务,通过webfilter拦截请求进行鉴权是更好的选择。
  2. 流量治理:使用自带的RequestRateLimiter过滤器实现限流,也可以集成AlibabaSentinel实现基于规则的动态限流,关于限流和熔断会在后续文章中展开说明。
  3. 灰度发布:基于请求头或权重路由,将部分流量导向新版本服务。
  4. 监控与日志:记录请求耗时、状态码、请求头标准化、植入全链路追踪TraceId等。

四、小结

Spring Cloud Gateway作为微服务架构的“流量守门员”,通过路由、断言、过滤器三大核心组件,实现了请求的动态分发与增强处理。其基于WebFlux和Netty的高性能架构,结合灵活的扩展机制,成为构建高并发、可观测微服务系统的关键基础设施。

五、实践

下面通过一个简单的例子实际了解一下spring cloud gateway
配置如下:
请添加图片描述
先启动网关服务
请添加图片描述
再启动路由里配置的flowservice-auth服务
请添加图片描述
通过网关访问flowservice-auth
请添加图片描述
在日志里可以看到路由信息
请添加图片描述
这个示例,简单实现了请求的路由,后续我会在其他文章中介绍springgcloud gateway 的其他功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值