一、网关介绍
1.1 背景与痛点
在微服务架构中,我们通常通过 Eureka 或 Nacos 解决服务注册与发现问题,利用 Spring Cloud LoadBalancer 实现负载均衡,并通过 OpenFeign 处理远程调用。然而,当所有微服务的接口直接对外暴露时,安全性便成了隐患。
为了保证服务安全,每个微服务内部都需要实现权限校验逻辑。随着服务拆分,原本单体应用中的单一模块变成了多个独立应用,这意味着我们需要在多处重复编写相同的鉴权代码。一旦校验规则需要调整,就必须修改多个应用,极大地增加了开发负担和维护成本。
解决这个问题最通用的方案是引入 API 网关。想象一下企业管理场景:早期只有一个员工负责核实身份;随着部门增多,每个部门都要重复核实流程,效率低下且增加工作量。改进后的做法是设立前台,由前台统一进行身份校验,通过后其他部门直接信任办理。API 网关正是扮演了这个'前台'的角色。
1.2 什么是 API 网关
API 网关(Gateway)是后端服务的唯一入口,其设计模式类似于门面模式(Facade)。它作为整个微服务架构的总控台,所有外部客户端的请求都必须经过它进行调度和过滤。
网关的核心功能主要包括:
- 权限控制:作为入口拦截非法请求,对用户进行身份验证。
- 动态路由:不处理具体业务,而是根据规则将请求转发到对应的微服务。
- 负载均衡:当目标服务有多个实例时,自动分配流量。
- 限流:在流量过高时限制请求,防止后端服务压力过大。
1.3 常见网关实现
业界成熟的网关方案不少,如 Nginx、Kong、Zuul 以及 Spring Cloud Gateway。
Zuul 曾是 Spring Cloud Netflix 的核心组件,但在 2018 年后进入维护状态,不再开发新特性。
Spring Cloud Gateway 是 Spring Cloud 全新的 API 网关项目,基于 Spring Boot 和 WebFlux 技术栈开发,旨在替代 Zuul。官方测试数据显示,其 RPS(每秒请求数)性能约为 Zuul 的 1.6 倍,更适合现代高并发微服务架构。
二、Spring Cloud Gateway 实战
2.1 快速上手
2.1.1 创建网关项目
新建一个标准的 Spring Boot 项目。
2.1.2 引入网关依赖
我们需要引入网关核心依赖、Nacos 服务发现依赖以及负载均衡依赖。
<!-- 网关核心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 基于 Nacos 实现服务发现依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-loadbalancer


