网关介绍
1.1 为什么需要网关
在微服务架构中,我们通常通过注册中心(如 Nacos、Eureka)解决服务发现问题,利用负载均衡器处理流量分发。然而,如果所有微服务的接口都直接对外暴露,会带来显著的安全隐患和维护成本。
原本单体应用中的权限校验逻辑被拆分到各个微服务中,导致重复开发。一旦安全策略调整,就需要修改多个服务,这大大增加了运维负担。为了解决这个问题,引入 API 网关是业界的标准做法。
类比理解
就像公司设立前台:外部人员办事需先在前台核实身份,通过后由各部门办理。若没有前台,每个部门都要单独核验身份,效率低且流程繁琐。网关就是这个'前台',统一处理鉴权与调度。
1.2 什么是 API 网关
API 网关是后端服务的唯一入口,其设计模式类似于门面模式(Facade)。它负责所有外部客户端请求的调度、过滤和转发。

核心功能包括:
- 权限控制:作为入口拦截非法请求,执行统一的鉴权。
- 动态路由:根据规则将请求转发至对应的微服务,不处理具体业务。
- 负载均衡:当目标服务有多个实例时,自动进行流量分发。
- 限流保护:控制进入系统的流量,防止下游服务因压力过大而崩溃。
1.3 常见网关方案
业界成熟的网关方案较多,如 Nginx、Kong、Zuul 等。这里重点对比两种主流方案:
Zuul Netflix 开源的组件,曾是 Spring Cloud 推荐的网关。但在 2018 年后,Netflix 宣布部分组件进入维护状态,不再更新新特性,Zuul 1.X 也随之停止演进。
Spring Cloud Gateway 基于 Spring Boot 和 WebFlux 技术栈全新构建,旨在替代 Zuul。官方测试显示,其 RPS(每秒请求数)性能约为 Zuul 的 1.6 倍。它提供了更简洁的路由配置和强大的横切关注点处理能力(如安全性、监控、弹性)。
Spring Cloud Gateway 实战
2.1 快速上手
2.1.1 创建项目
新建一个标准的 Spring Boot 项目,命名为 gateway。
2.1.2 引入依赖
我们需要网关核心依赖、服务发现依赖以及负载均衡依赖。
<!-- 网关核心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos 服务发现 -->
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-loadbalancer




