一、网关介绍
1.1 背景与问题
在微服务架构中,我们通常通过 Eureka 或 Nacos 解决服务注册与发现,利用 Spring Cloud LoadBalancer 处理负载均衡,借助 OpenFeign 完成远程调用。然而,如果所有微服务的接口都直接对外暴露,会带来显著的安全隐患。
服务端实现的微服务接口往往带有权限校验机制。由于微服务拆分,原本一个应用的多个模块变成了多个独立应用,导致我们需要在每个应用中重复实现相同的校验逻辑。一旦这套逻辑需要调整,就必须修改多个应用,极大地增加了开发负担。
针对这一问题,引入 API 网关是业界的标准解决方案。这就好比公司设立前台,外部人员办理业务前先由前台核实身份,通过后各部门再直接办理。这样既保证了安全,又提升了效率。
1.2 什么是 API 网关
API 网关(简称网关)是后端服务的唯一入口,其设计模式类似于门面模式(Facade)。它作为整个微服务架构的总控,所有外部客户端访问都需要经过它进行调度和过滤。

网关的核心功能包括:
- 权限控制:作为入口对用户进行鉴权,失败则拦截。
- 动态路由:根据规则将请求转发到具体的微服务。
- 负载均衡:当目标服务有多个实例时,自动分发流量。
- 限流:防止请求流量过高导致服务压力过大。
1.3 常见网关实现
业界成熟的网关方案很多,如 Nginx、Kong、Zuul 和 Spring Cloud Gateway。
Zuul Zuul 是 Netflix 开源的组件,曾是 Spring Cloud Netflix 的核心部分。但在 2018 年,Netflix 宣布部分组件进入维护状态,不再开发新功能,Zuul 也在其中。
Spring Cloud Gateway 这是 Spring Cloud 全新推出的 API 网关项目,基于 Spring + SpringBoot 开发,旨在替换 Zuul。它为微服务架构提供了简单有效的请求转发途径,并支持安全性、监控指标和弹性等横切关注点。官方测试显示,其 RPS(每秒请求数)是 Zuul 的 1.6 倍。
二、Spring Cloud Gateway 实战
2.1 快速上手
2.1.1 创建网关项目
新建一个标准的 Spring Boot 项目即可。
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



