✅ 课程衔接:已掌握微服务拆分方法论与全链路治理体系,完成电商项目微服务改造。本课聚焦微服务架构的核心入口 ------API 网关,从设计原则、核心功能实战、接口全生命周期管理三个维度,落地企业级 API 网关方案,解决微服务接口分散、鉴权复杂、版本混乱、文档缺失等问题,实现接口的统一管控与高效治理。✅ 核心价值:✅ 掌握微服务 API 网关的设计原则与架构选型;✅ 精通 Spring Cloud Gateway 核心功能实战(动态路由、统一鉴权、精细限流、灰度发布);✅ 搭建接口全生命周期管理体系(设计、发布、测试、监控、下线);✅ 实现电商微服务网关的高可用部署与接口治理落地。✅ 学习目标:✅ 理解 API 网关在微服务架构中的核心定位与设计原则;✅ 独立完成 Spring Cloud Gateway 核心功能的企业级配置;✅ 搭建接口文档聚合与版本管理体系;✅ 掌握网关性能优化与常见问题排查技巧;✅ 完成电商微服务 API 网关的全流程落地。
📚 课程目录(实战导向|聚焦网关与接口治理)
- 【课前衔接】微服务架构下的接口痛点:为什么需要 API 网关?
- 【模块一】API 网关核心认知与设计原则(微服务必备)
- 【模块二】Spring Cloud Gateway 核心功能实战(企业级配置)
- 【模块三】接口全生命周期管理体系搭建(设计到下线)
- 【模块四】综合实战:电商微服务 API 网关落地与接口治理
- 【模块五】网关性能优化与常见问题排查(企业级经验)
- 【课后思考与作业】网关配置与接口治理实操
- 【本课小结】核心知识点复盘与下一课预告
✅ 一、课前衔接:微服务架构下的接口痛点
第 3 课我们完成了电商项目的微服务改造,拆分为 6 个独立服务,每个服务暴露多个接口,但随之而来的接口管理问题逐渐凸显:
- 接口入口分散:前端需要记住每个服务的地址与端口,对接成本高;
- 鉴权逻辑冗余:每个服务都要实现 Token 校验、权限控制,代码重复且规则不统一;
- 流量控制缺失:无法对全链路接口进行统一限流、熔断,易引发服务雪崩;
- 接口版本混乱:服务迭代导致接口版本升级(如 v1/v2),前端适配困难;
- 文档缺失分散:每个服务的接口文档独立维护,前端难以快速查询与对接。
而API 网关作为微服务的统一入口,正是解决这些问题的核心组件 ------ 它不仅承担路由转发的基础功能,更要实现统一鉴权、流量控制、版本管理、文档聚合等接口治理能力,是微服务架构中不可或缺的核心层。
✅ 二、模块一:API 网关核心认知与设计原则
2.1 API 网关的核心定义与定位
API 网关是位于客户端与微服务之间的中间层,作为所有客户端请求的统一入口,负责路由转发、鉴权限流、日志监控、接口治理等核心功能,其在微服务架构中的定位如下:
plaintext
客户端 → API网关 → 微服务集群(用户/商品/订单等)
核心价值:隔离客户端与微服务,简化客户端对接逻辑,统一管控接口流量与生命周期。
2.2 API 网关的核心功能(企业级必备)
- 基础功能:路由转发(将客户端请求转发至对应微服务)、负载均衡(分发请求至服务多节点);
- 治理功能:统一鉴权(Token 校验、权限控制)、精细限流(按服务 / 接口 / 用户限流)、熔断降级(服务异常时的容错处理);
- 进阶功能:接口版本管理(v1/v2 版本兼容)、灰度发布(按规则分发流量至不同版本)、文档聚合(统一管理所有服务接口文档);
- 运维功能:流量监控(接口 QPS、响应时间、错误率)、日志收集(统一收集接口访问日志)、链路追踪(与 SkyWalking 集成)。
2.3 API 网关的设计原则(企业级规范)
- 职责单一原则:网关仅负责接口治理相关功能,不包含业务逻辑(如不处理订单创建、商品查询等业务);
- 高可用原则:网关是系统入口,需集群部署,配合负载均衡(如 Nginx)避免单点故障,可用性需达到 99.9% 以上;
- 高性能原则:网关处理所有请求,需具备高性能,响应时间应控制在 10ms 以内,避免成为系统瓶颈;
- 可扩展原则:支持通过插件化扩展功能(如自定义限流插件、鉴权插件),适配不同业务场景;
- 安全性原则:实现接口防刷、SQL 注入防护、XSS 攻击防护等安全功能,保障微服务集群安全。
2.4 API 网关选型对比(企业级落地)
目前主流的 API 网关有 Spring Cloud Gateway、Nginx Plus、Kong 等,结合前几课的 Spring Cloud Alibaba 生态,推荐使用Spring Cloud Gateway,以下是选型对比:
| 网关类型 | 核心优势 | 劣势 | 适用场景 |
|---|---|---|---|
| Spring Cloud Gateway | 基于 Spring 生态,无缝集成微服务治理组件(Nacos/Sentinel),支持动态路由,性能高 | 仅适用于 Spring Cloud 架构 | Java 微服务架构(企业主流) |
| Nginx Plus | 性能极高,支持四层 / 七层负载均衡 | 配置复杂,扩展功能需编写 Lua 脚本 | 非 Java 架构、高性能要求场景 |
| Kong | 插件化生态丰富,支持多语言微服务 | 性能略低于 Gateway,运维成本高 | 多语言混合微服务架构 |
核心选型建议:Spring Cloud Gateway 是 Java 微服务架构的首选,与前几课的 Nacos、Sentinel、SkyWalking 等组件无缝集成,无需额外适配,开发与运维成本低。
✅ 三、模块二:Spring Cloud Gateway 核心功能实战
Spring Cloud Gateway 是基于 Spring WebFlux 的异步非阻塞网关,性能优于传统的 Zuul 网关,支持动态路由、统一鉴权、精细限流等核心功能,以下是企业级核心功能的实战配置。
3.1 环境准备与基础配置
3.1.1 依赖引入(pom.xml)
xml
<!-- Spring Cloud Gateway核心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos服务发现依赖(用于动态路由) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- Sentinel限流依赖(用于网关限流) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- 负载均衡依赖(用于服务多节点负载均衡) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
3.1.2 基础配置(application.yml)
yaml
server:
port: 8080 # 网关端口(客户端统一访问端口)
spring:
application:
name: gateway-service # 网关服务名
cloud:
# Nacos服务发现配置
nacos:
discovery:
server-addr: localhost:8848 # Nacos地址
# Gateway核心配置
gateway:
discovery:
locator:
enabled: true # 开启服务发现路由(可通过服务名转发请求)
lower-case-service-id: true # 服务名小写
routes:
# 订单服务路由(基础静态路由)
- id: order-service-route
uri: lb://order-service # lb://服务名:负载均衡转发至订单服务
predicates:
- Path=/api/order/** # 前端请求路径匹配
filters:
- RewritePath=/api/order/(?<segment>.*), /${segment} # 路径重写:/api/order/xxx → /xxx
3.2 核心功能 1:动态路由(基于 Nacos 配置中心)
静态路由需要在网关配置文件中硬编码,服务迭代或新增时需重启网关,而动态路由通过 Nacos 配置中心管理路由规则,无需重启网关即可实现路由的新增、修改、删除,是企业级网关的必备功能。
3.2.1 配置 Nacos 动态路由
- 新增依赖(pom.xml):
xml
<!-- Nacos配置中心依赖(用于动态路由配置) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
- 配置 bootstrap.yml(优先级高于 application.yml):
yaml
spring:
application:
name: gateway-service
cloud:
nacos:
config:
server-addr: localhost:8848 # Nacos配置中心地址
file-extension: yaml # 配置文件格式
namespace: dev-namespace # 开发环境命名空间
group: GATEWAY_GROUP # 网关配置分组
- 在 Nacos 配置中心新增路由配置:
- 数据 ID:
gateway-service.yaml(格式:服务名。文件格式) - 分组:
GATEWAY_GROUP - 配置内容:
- 数据 ID:
yaml
spring:
cloud:
gateway:
routes:
# 用户服务动态路由
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/api/user/**
filters:
- RewritePath=/api/user/(?<segment>.*), /${segment}
# 商品服务动态路由
- id: goods-service-route
uri: lb://goods-service
predicates:
- Path=/api/goods/**
filters:
- RewritePath=/api/goods/(?<segment>.*), /${segment}
- 验证动态路由:修改 Nacos 中的路由配置(如新增支付服务路由),无需重启网关,前端请求即可自动转发至对应服务。
3.3 核心功能 2:统一鉴权(基于 JWT Token)
微服务架构中,每个服务都需要实现鉴权逻辑,代码重复且规则不统一,而统一鉴权通过网关层实现 Token 校验、权限控制,所有请求先经过网关鉴权,通过后再转发至微服务,简化服务开发,统一鉴权规则。
3.3.1 自定义鉴权过滤器
java
运行
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
@Component
public class JwtAuthFilter extends AbstractGatewayFilterFactory<JwtAuthFilter.Config> {
// JWT密钥(与用户服务一致)
private static final String JWT_SECRET = "your-jwt-secret-key";
// 配置类(用于传递过滤器参数)
public static class Config {}
public JwtAuthFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerWebExchange serverWebExchange = exchange;
String path = serverWebExchange.getRequest().getPath().value();
// 1. 排除无需鉴权的接口(登录、注册、商品查询等)
if (path.contains("/api/user/login") || path.contains("/api/user/register") || path.contains("/api/goods/query")) {
return chain.filter(exchange);
}
// 2. 获取请求头中的Token
String token = serverWebExchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null || !token.startsWith("Bearer ")) {
// Token不存在,返回401未授权
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 3. 校验Token有效性
String realToken = token.split(" ")[1];
try {
Claims claims = Jwts.parser()
.setSigningKey(JWT_SECRET)
.parseClaimsJws(realToken)
.getBody();
// 4. 将用户信息存入请求头,传递至微服务
String userId = claims.get("userId", String.class);
serverWebExchange = exchange.mutate()
.request(exchange.getRequest().mutate().header("X-User-Id", userId).build())
.build();
} catch (Exception e) {
// Token无效,返回401未授权
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 5. 鉴权通过,继续转发请求
return chain.filter(serverWebExchange);
};
}
}
3.3.2 配置鉴权过滤器(Nacos 动态路由中添加)
yaml
spring:
cloud:
gateway:
routes:
- id: order-service-route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- RewritePath=/api/order/(?<segment>.*), /${segment}
- name: JwtAuthFilter # 添加自定义鉴权过滤器
3.4 核心功能 3:精细限流(基于 Sentinel 按场景限流)
网关限流是保障微服务稳定的核心手段,精细限流支持按服务、接口、用户、IP 等多维度限流,避免高并发请求压垮微服务,以下是基于 Sentinel 的企业级限流配置。
3.4.1 按服务限流(订单服务)
yaml
spring:
cloud:
gateway:
routes:
- id: order-service-route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- RewritePath=/api/order/(?<segment>.*), /${segment}
- name: Sentinel
args:
resourceName: order-service # 限流资源名(按服务限流)
controlBehavior: 0 # 快速失败
count: 1000 # 限流阈值:每秒1000个请求
intervalSec: 1 # 统计时间窗口:1秒
3.4.2 按接口限流(订单创建接口)
yaml
spring:
cloud:
gateway:
routes:
- id: order-service-create-route
uri: lb://order-service
predicates:
- Path=/api/order/create # 仅匹配订单创建接口
filters:
- RewritePath=/api/order/create, /order/create
- name: Sentinel
args:
resourceName: order-service:create # 限流资源名(按接口限流)
controlBehavior: 0
count: 200 # 限流阈值:每秒200个请求
intervalSec: 1
3.4.3 自定义限流响应(全局配置)
java
运行
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
@Configuration
public class GatewaySentinelConfig {
static {
GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
@Override
public Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable t) {
String result = "{\"code\":503,\"msg\":\"当前接口访问量过大,请稍后再试\",\"data\":null}";
return ServerResponse.status(503)
.body(BodyInserters.fromValue(result));
}
});
}
}
3.5 核心功能 4:接口版本管理(v1/v2 版本兼容)
微服务迭代过程中,接口会发生变更(如新增字段、修改参数),需要支持多版本接口并存,接口版本管理通过网关路由实现 v1/v2 版本的兼容,前端可根据需求选择对应版本的接口。
3.5.1 版本路由配置(Nacos 动态路由)
yaml
spring:
cloud:
gateway:
routes:
# 订单服务v1版本路由
- id: order-service-v1-route
uri: lb://order-service
predicates:
- Path=/api/v1/order/** # v1版本路径
filters:
- RewritePath=/api/v1/order/(?<segment>.*), /order/${segment}
# 订单服务v2版本路由(新服务独立部署)
- id: order-service-v2-route
uri: lb://order-service-v2 # v2版本服务名
predicates:
- Path=/api/v2/order/** # v2版本路径
filters:
- RewritePath=/api/v2/order/(?<segment>.*), /order/${segment}
3.5.2 版本管理核心规则
- 路径版本化:通过 URL 路径区分版本(如
/api/v1/order/create、/api/v2/order/create); - 服务独立部署:v2 版本接口可独立部署为新服务(
order-service-v2),避免影响 v1 版本; - 渐进式迁移:前端逐步从 v1 版本迁移至 v2 版本,网关路由保证两个版本同时可用。
3.6 核心功能 5:灰度发布(基于用户标签路由)
灰度发布是降低新版本上线风险的核心手段,基于用户标签的灰度发布通过网关将特定用户(如测试用户、VIP 用户)的请求转发至新版本服务,其他用户的请求转发至旧版本服务,实现平滑迁移。
3.6.1 自定义灰度发布过滤器
java
运行
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
@Component
public class GrayReleaseFilter extends AbstractGatewayFilterFactory<GrayReleaseFilter.Config> {
// 灰度用户ID列表(实际项目中可从配置中心或数据库获取)
private static final List<String> GRAY_USER_IDS = Arrays.asList("1001", "1002", "1003");
public static class Config {}
public GrayReleaseFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerWebExchange serverWebExchange = exchange;
// 1. 获取用户ID(从鉴权过滤器设置的请求头中获取)
String userId = serverWebExchange.getRequest().getHeaders().getFirst("X-User-Id");
if (userId == null) {
return chain.filter(exchange);
}
// 2. 判断用户是否为灰度用户
if (GRAY_USER_IDS.contains(userId)) {
// 3. 灰度用户:转发至v2版本服务
serverWebExchange = exchange.mutate()
.request(exchange.getRequest().mutate().uri(URI.create("lb://order-service-v2")).build())
.build();
} else {
// 4. 非灰度用户:转发至v1版本服务
serverWebExchange = exchange.mutate()
.request(exchange.getRequest().mutate().uri(URI.create("lb://order-service")).build())
.build();
}
return chain.filter(serverWebExchange);
};
}
}
3.6.2 配置灰度发布过滤器
yaml
spring:
cloud:
gateway:
routes:
- id: order-service-gray-route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- RewritePath=/api/order/(?<segment>.*), /${segment}
- name: JwtAuthFilter # 先鉴权
- name: GrayReleaseFilter # 再灰度发布
✅ 四、模块三:接口全生命周期管理体系搭建
接口全生命周期管理是指从接口设计、发布、测试、监控、下线的完整管控流程,通过 API 网关结合接口文档工具、监控工具,实现接口的统一治理,提升接口对接效率与稳定性。
4.1 接口设计:统一规范与文档生成
4.1.1 接口设计规范(企业级)
- 路径规范 :
/api/版本/服务名/接口功能(如/api/v1/order/create、/api/v2/goods/query); - 请求方式规范:GET(查询)、POST(创建)、PUT(更新)、DELETE(删除);
- 参数规范 :请求参数需包含
timestamp(时间戳)、sign(签名),防止接口篡改; - 响应规范 :统一响应格式为
{ "code": 200, "msg": "success", "data": {} }。
4.1.2 接口文档聚合(基于 Knife4j)
Knife4j 是基于 Swagger 的接口文档工具,支持聚合多个微服务的接口文档,通过网关统一访问,实现接口文档的集中管理。
- 各微服务集成 Knife4j(以订单服务为例,pom.xml):
xml
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
- 网关配置接口文档聚合路由(Nacos 动态路由):
yaml
spring:
cloud:
gateway:
routes:
- id: knife4j-route
uri: lb://order-service # 转发至任意服务,通过路径匹配聚合所有服务文档
predicates:
- Path=/doc/** # 网关文档访问路径
filters:
- RewritePath=/doc/(?<segment>.*), /${segment}
- 统一访问接口文档:
http://localhost:8080/doc.html,可查看所有微服务的接口文档。
4.2 接口发布:版本管理与灰度发布
- 版本管理:通过网关的版本路由功能,实现 v1/v2 版本接口并存,避免接口变更影响前端;
- 灰度发布:通过网关的灰度发布过滤器,实现按用户标签、IP、比例等规则的灰度发布,降低新版本上线风险;
- 发布流程:接口设计→开发→测试→灰度发布→全量发布,通过网关统一管控发布流程。
4.3 接口测试:自动化测试与契约测试
- 自动化测试:使用 PostMan、JMeter 等工具,对网关暴露的接口进行自动化测试,确保接口功能正常;
- 契约测试:使用 Spring Cloud Contract 等工具,实现微服务之间的接口契约测试,确保接口变更符合契约,避免服务间对接失败。
4.4 接口监控:全链路监控与告警
- 流量监控:通过 SkyWalking 集成网关,实现接口的 QPS、响应时间、错误率等指标的全链路监控;
- 日志监控:通过 ELK 集成网关,统一收集接口访问日志,实现日志的查询与分析;
- 告警配置:通过 Prometheus+Grafana 集成网关,配置接口指标告警(如 QPS 超过阈值、响应时间过长),及时发现接口问题。
4.5 接口下线:优雅下线与版本淘汰
- 优雅下线:接口下线前,通过网关的限流功能逐步减少流量,通知前端适配新接口,避免直接下线导致前端报错;
- 版本淘汰:当 v2 版本接口全量发布且稳定运行后,通过网关删除 v1 版本路由,淘汰旧版本接口,清理资源。
✅ 五、模块四:综合实战:电商微服务 API 网关落地与接口治理
承接第 3 课的电商微服务项目,基于本课知识点落地企业级 API 网关,实现接口的统一入口与全生命周期治理。
5.1 实战目标
- 搭建高可用 API 网关集群,作为电商微服务的统一入口;
- 实现动态路由、统一鉴权、精细限流、版本管理、灰度发布等核心功能;
- 搭建接口全生命周期管理体系,实现接口的设计、发布、测试、监控、下线管控;
- 网关性能指标:响应时间 < 10ms,支持 1 万 QPS,可用性 99.9%。
5.2 核心落地步骤
- 第一步:网关集群搭建
- 部署 2 个网关节点(端口 8080、8081),配合 Nginx 实现负载均衡,避免单点故障;
- 集成 Nacos 配置中心,实现动态路由管理,无需重启网关即可更新路由。
- 第二步:核心功能配置
- 统一鉴权:配置 JwtAuthFilter,实现所有接口的 Token 校验与权限控制;
- 精细限流:配置 Sentinel 限流规则,按服务(订单服务 1000QPS)、接口(订单创建 200QPS)进行限流;
- 版本管理:配置 v1/v2 版本路由,实现订单服务、商品服务的版本兼容;
- 灰度发布:配置 GrayReleaseFilter,实现按用户标签的灰度发布。
- 第三步:接口治理体系搭建
- 接口文档聚合:集成 Knife4j,实现所有微服务接口文档的统一访问;
- 全链路监控:集成 SkyWalking,实现接口的 QPS、响应时间、错误率监控;
- 日志收集:集成 ELK,统一收集接口访问日志,实现日志的查询与分析;
- 告警配置:集成 Prometheus+Grafana,配置接口指标告警,及时发现接口问题。
- 第四步:压测与优化
- 压测工具:JMeter,压测网关的核心接口(订单创建、商品查询);
- 压测结果:网关响应时间平均 8ms,支持 1.2 万 QPS,满足目标需求;
- 优化点:配置网关连接池(最大连接数 1000)、启用本地缓存(缓存高频路由规则)、优化 JWT 校验性能(使用缓存存储已校验 Token)。
✅ 六、模块五:网关性能优化与常见问题排查
6.1 网关性能优化核心技巧
- 连接池优化:配置网关的 HTTP 连接池,设置合理的最大连接数、连接超时时间,提升连接复用率;
- 缓存优化:启用本地缓存,缓存高频路由规则、JWT 公钥、权限规则等,减少 Nacos、数据库的查询压力;
- 异步处理:使用 Spring WebFlux 的异步非阻塞特性,避免同步处理阻塞网关线程;
- 资源隔离:通过网关的过滤器实现资源隔离,避免单个服务的高并发请求占用网关全部资源;
- 硬件优化:部署网关集群,使用高性能服务器(多核 CPU、大内存),提升网关处理能力。
6.2 常见问题与排查方案
| 常见问题 | 排查方案 |
|---|---|
| 路由冲突(多个路由匹配同一请求) | 1. 调整路由顺序(网关按路由配置顺序匹配);2. 使用更精确的路径匹配(如/api/order/create比/api/order/**更精确);3. 在 Nacos 配置中心统一管理路由,避免重复配置 |
| 鉴权性能瓶颈(JWT 校验耗时过长) | 1. 启用本地缓存,缓存已校验的 Token,有效期设置为 5 分钟;2. 优化 JWT 校验逻辑,使用轻量级的 JWT 库;3. 分布式部署鉴权服务,网关通过 RPC 调用鉴权服务,分散鉴权压力 |
| 限流规则不生效 | 1. 检查 Sentinel 控制台是否正确配置限流规则;2. 检查网关是否集成 Sentinel 依赖;3. 检查限流资源名是否与网关路由的资源名一致;4. 查看网关日志,排查限流过滤器的异常信息 |
| 灰度发布不生效 | 1. 检查灰度发布过滤器是否正确配置;2. 检查用户 ID 是否正确传递至网关;3. 查看网关日志,排查灰度发布过滤器的逻辑错误;4. 测试灰度用户与非灰度用户的请求是否转发至正确的服务版本 |
✅ 七、课后思考与作业
必做题(核心实操)
- 基于 Spring Cloud Gateway,为电商微服务配置动态路由(用户服务、商品服务、订单服务),通过 Nacos 配置中心实现路由的新增与修改,无需重启网关;
- 实现网关的统一鉴权功能,基于 JWT Token 校验,排除登录、注册、商品查询等无需鉴权的接口;
- 配置网关的精细限流规则,按服务(订单服务 1000QPS)、接口(订单创建 200QPS)进行限流,并自定义限流响应。
选做题(拓展提升)
- 实现网关的灰度发布功能,基于用户 ID 的比例(10%)将请求转发至新版本服务,90% 的请求转发至旧版本服务;
- 集成 Knife4j,实现电商微服务所有接口文档的聚合,通过网关统一访问接口文档;
- 搭建网关集群(2 个节点),配合 Nginx 实现负载均衡,测试网关的高可用能力。
📌 本课小结
本课核心落地了微服务架构下的API 网关设计与接口全生命周期管理:API 网关作为微服务的统一入口,通过动态路由、统一鉴权、精细限流、版本管理、灰度发布等核心功能,解决了微服务接口分散、鉴权复杂、流量控制缺失等问题;接口全生命周期管理体系通过接口设计、发布、测试、监控、下线的完整管控,实现了接口的统一治理,提升了接口对接效率与稳定性。
掌握本课内容后,你将具备企业级 API 网关的设计与落地能力,能够独立完成微服务架构的接口治理工作,为后续的云原生架构进阶打下坚实基础。
下一课将聚焦服务网格(Istio)实战,讲解服务网格的核心概念、架构设计与核心功能,实现微服务的流量治理、安全治理、可观测性治理,完成从 API 网关到服务网格的进阶,适配大规模微服务集群的治理需求。