Spring Cloud 微服务架构全景图

一、微服务架构概述

1.1 为什么需要微服务架构?

┌─────────────────────────────────────────────────────────────────────────┐
│                        从单体到微服务的演进                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                         单体架构                                 │    │
│  │                                                                  │    │
│  │  ┌─────────┬─────────┬─────────┬─────────┐                   │    │
│  │  │ 用户    │ 订单    │ 商品    │ 支付    │                   │    │
│  │  │ 模块    │ 模块    │ 模块    │ 模块    │                   │    │
│  │  └─────────┴─────────┴─────────┴─────────┘                   │    │
│  │                        │                                      │    │
│  │                    ┌────┴────┐                               │    │
│  │                    │ 数据库   │                               │    │
│  │                    └─────────┘                               │    │
│  │                                                                  │    │
│  │  问题:                                                          │    │
│  │  ❌ 代码耦合,改一处动全身                                       │    │
│  │  ❌ 部署周期长,一个小功能需要全量发布                            │    │
│  │  ❌ 技术栈固化,无法快速引入新技术                                │    │
│  │  ❌ 扩展困难,无法针对热点模块单独扩容                            │    │
│  │  ❌ 故障影响范围大,一个模块OOM可能导致整个应用不可用              │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                  │                                      │
│                                  ▼                                      │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                         微服务架构                                │    │
│  │                                                                  │    │
│  │      ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐            │    │
│  │      │ 用户   │  │ 订单   │  │ 商品   │  │ 支付   │            │    │
│  │      │ 服务   │  │ 服务   │  │ 服务   │  │ 服务   │            │    │
│  │      └───┬────┘  └───┬────┘  └───┬────┘  └───┬────┘            │    │
│  │          │            │            │            │                 │    │
│  │      ┌───┴────────────┴────────────┴────────────┴───┐         │    │
│  │      │              API Gateway                      │         │    │
│  │      └────────────────────┬───────────────────────────┘         │    │
│  │                           │                                      │    │
│  │      ┌────────┐  ┌────────┴────────┐  ┌────────┐              │    │
│  │      │ MySQL  │  │    Redis       │  │MongoDB │              │    │
│  │      └────────┘  └─────────────────┘  └────────┘              │    │
│  │                                                                  │    │
│  │  优势:                                                          │    │
│  │  ✅ 服务独立部署,一个模块变更无需影响其他模块                     │    │
│  │  ✅ 技术栈灵活,不同服务可选用不同技术栈                          │    │
│  │  ✅ 按需扩展,针对热点服务单独扩容                                 │    │
│  │  ✅ 故障隔离,单个服务故障不会导致整个系统不可用                   │    │
│  │  ✅ 团队自治,每个团队负责独立服务,减少协调成本                   │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

1.2 微服务架构面临的核心挑战

挑战类别具体问题解决方案关联文章
服务通信服务如何发现彼此?如何调用?注册中心 + 负载均衡服务注册发现、负载均衡
配置管理如何统一管理配置?配置变更如何生效?配置中心 + 消息总线配置中心原理、Spring Cloud Bus
弹性容错服务故障如何隔离?如何避免雪崩?熔断、降级、重试、限流Sentinel、客户端重试
网关路由外部请求如何路由到内部服务?API 网关Gateway 动态路由
可观测性如何追踪请求链路?如何监控服务健康?链路追踪 + 监控 + 日志可观测性系列
安全认证如何控制服务访问权限?OAuth2 + JWT安全认证系列
事务一致性跨服务如何保证数据一致性?分布式事务Seata 分布式事务

二、Spring Cloud 全景图

2.1 技术栈总览

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              Spring Cloud 技术栈全景图                               │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              业务应用层                                       │   │
│  │                                                                             │   │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐        │   │
│  │  │ 用户    │  │ 订单    │  │ 商品    │  │ 支付    │  │ 搜索    │        │   │
│  │  │ 服务    │  │ 服务    │  │ 服务    │  │ 服务    │  │ 服务    │        │   │
│  │  │         │  │         │  │         │  │         │  │         │        │   │
│  │  │ user-   │  │ order-  │  │ product │  │ payment │  │ search- │        │   │
│  │  │ service │  │ service │  │ -service│  │ -service│  │ service │        │   │
│  │  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘        │   │
│  └───────┼───────────┼───────────┼───────────┼───────────┼─────────────────┘   │
│          │           │           │           │           │                       │
│  ┌───────┴───────────┴───────────┴───────────┴───────────┴─────────────────┐   │
│  │                              服务网格层                                       │   │
│  │                                                                             │   │
│  │  ┌─────────────────────────────────────────────────────────────────────┐   │   │
│  │  │                        API Gateway                                   │   │   │
│  │  │                                                                      │   │   │
│  │  │   SpringCloud Gateway          核心能力:                          │   │   │
│  │  │   ├── 动态路由                  • 路由转发                          │   │   │
│  │  │   ├── 请求过滤器               • 认证鉴权                          │   │   │
│  │  │   ├── 限流熔断                 • 限流熔断                          │   │   │
│  │  │   └── 协议转换                 • 请求监控                          │   │   │
│  │  └─────────────────────────────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              服务治理层                                       │   │
│  │                                                                             │   │
│  │  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐          │   │
│  │  │   服务注册发现   │  │    负载均衡      │  │    配置中心      │          │   │
│  │  │                  │  │                  │  │                  │          │   │
│  │  │   Nacos          │  │  LoadBalancer    │  │  Spring Config   │          │   │
│  │  │   ├── 注册       │  │  ├── 轮询        │  │  ├── Git 配置    │          │   │
│  │  │   ├── 发现       │  │  ├── 随机        │  │  ├── 本地缓存    │          │   │
│  │  │   ├── 心跳       │  │  ├── 加权        │  │  ├── 热刷新      │          │   │
│  │  │   └── 分组       │  │  └── 最小连接    │  │  └── 多环境      │          │   │
│  │  └──────────────────┘  └──────────────────┘  └──────────────────┘          │   │
│  │                                                                             │   │
│  │  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐          │   │
│  │  │    弹性容错      │  │    消息总线      │  │   分布式事务    │          │   │
│  │  │                  │  │                  │  │                  │          │   │
│  │  │   Sentinel       │  │  Spring Bus      │  │  Seata           │          │   │
│  │  │   ├── 限流       │  │  ├── RabbitMQ    │  │  ├── AT 模式     │          │   │
│  │  │   ├── 熔断       │  │  ├── Kafka       │  │  ├── TCC 模式    │          │   │
│  │  │   ├── 降级       │  │  └── 配置广播    │  │  └── Saga 模式   │          │   │
│  │  │   └── 热点参数   │  │                  │  │                  │          │   │
│  │  └──────────────────┘  └──────────────────┘  └──────────────────┘          │   │
│  │                                                                             │   │
│  │  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐          │   │
│  │  │    健康检查      │  │   链路追踪       │  │   监控告警       │          │   │
│  │  │                  │  │                  │  │                  │          │   │
│  │  │  HealthIndicator │  │  Sleuth + Zipkin │  │  Prometheus      │          │   │
│  │  │  ├── 心跳检测   │  │  ├── TraceId     │  │  ├── 指标采集    │          │   │
│  │  │  ├── 依赖检测   │  │  ├── SpanId      │  │  ├── Grafana     │          │   │
│  │  │  └── 自定义     │  │  └── 采样策略    │  │  └── 告警规则    │          │   │
│  │  └──────────────────┘  └──────────────────┘  └──────────────────┘          │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                     │
│  ┌─────────────────────────────────────────────────────────────────────────────┐   │
│  │                              基础设施层                                       │   │
│  │                                                                             │   │
│  │    ┌────────┐   ┌────────────┐   ┌─────────────────┐   ┌────────────┐       │   │
│  │    │ Docker │   │Kubernetes  │   │   CI/CD         │   │  存储      │       │   │
│  │    │        │   │            │   │                 │   │            │       │   │
│  │    │ 容器化 │   │ K8s 编排   │   │ Jenkins/ArgoCD │   │ MySQL      │       │   │
│  │    │ 镜像   │   │ 服务发现   │   │ 自动化部署     │   │ Redis      │       │   │
│  │    └────────┘   │ 自动扩缩容│   │ 蓝绿部署       │   │ ES         │       │   │
│  │                  └────────────┘   └─────────────────┘   └────────────┘       │   │
│  └─────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

2.2 组件分类详表

层级组件职责推荐方案状态
网关层SpringCloud Gateway统一入口、路由、限流✅ 首选
Zuul / Zuul2早期网关方案⚠️ 已停更-
KongNginx 网关性能要求高时
服务治理Nacos注册中心 + 配置中心✅ 首选
Consul服务发现 + KV 存储跨语言场景
EurekaNetflix 方案⚠️ 已停更-
负载均衡SpringCloud LoadBalancer客户端负载均衡✅ 首选
Ribbon早期方案⚠️ 已停更-
配置中心Spring Cloud ConfigGit 配置管理✅ 基础方案
Nacos Config配置中心✅ 国产方案
Apollo携程配置中心企业级方案
弹性容错Sentinel熔断限流✅ 首选
Resilience4j函数式容错轻量级方案
Spring Retry重试机制✅ 内置支持
消息总线Spring Cloud Bus配置刷新广播
分布式事务SeataAT/TCC/Saga 模式
链路追踪Sleuth + Zipkin分布式追踪✅ 基础方案
SkyWalkingAPM 工具生产级方案
监控告警Prometheus + Grafana指标监控
安全认证Spring Security OAuth2认证授权
JWTToken 方案

三、服务注册与发现

3.1 原理详解

┌─────────────────────────────────────────────────────────────────────────┐
│                        服务注册与发现完整流程                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  1. 服务启动注册                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                                                                  │    │
│  │   ServiceA                                                      │    │
│  │   ┌─────────────────┐                                         │    │
│  │   │   @EnableDiscoveryClient                                   │    │
│  │   │   或                                                             │    │
│  │   │   @EnableEurekaClient                                       │    │
│  │   └────────┬────────┘                                         │    │
│  │            │                                                   │    │
│  │            ▼                                                   │    │
│  │   ┌─────────────────────────────────────────────────────┐     │    │
│  │   │  1. 读取配置:spring.cloud.nacos.discovery.server-addr    │     │    │
│  │   │  2. 构建实例信息:IP、Port、权重、 metadata              │     │    │
│  │   │  3. 发送注册请求:POST /nacos/v1/ns/instance            │     │    │
│  │   │  4. 建立心跳:定时发送续约心跳                           │     │    │
│  │   └─────────────────────────────────────────────────────┘     │    │
│  │            │                                                   │    │
│  └────────────┼───────────────────────────────────────────────────┘    │
│               │                                                          │
│               ▼                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                    Nacos Server                                  │    │
│  │                                                                  │    │
│  │   ┌─────────────────────────────────────────────────────┐     │    │
│  │   │                   Service Registry                    │     │    │
│  │   │                                                      │     │    │
│  │   │   {                                                   │     │    │
│  │   │     "serviceName": "order-service",                   │     │    │
│  │   │     "hosts": [                                       │     │    │
│  │   │       { "ip": "192.168.1.101", "port": 8080 },       │     │    │
│  │   │       { "ip": "192.168.1.102", "port": 8080 }       │     │    │
│  │   │       { "ip": "192.168.1.103", "port": 8080 }       │     │    │
│  │   │     ]                                                  │     │    │
│  │   │   }                                                   │     │    │
│  │   └─────────────────────────────────────────────────────┘     │    │
│  │            │                                                   │    │
│  │            ▼                                                   │    │
│  │   ┌─────────────────────────────────────────────────────┐     │    │
│  │   │                   定时检查                           │     │    │
│  │   │   • 心跳超时(15s)→ 从列表移除                       │     │    │
│  │   │   • 保护阈值 → 开启阈值保护                          │     │    │
│  │   └─────────────────────────────────────────────────────┘     │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│               │                                                          │
│               ▼                                                          │
│  2. 服务发现订阅                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                                                                  │    │
│  │   ServiceB                                                      │    │
│  │   ┌─────────────────┐                                         │    │
│  │   │ DiscoveryClient │                                         │    │
│  │   └────────┬────────┘                                         │    │
│  │            │                                                   │    │
│  │            ▼                                                   │    │
│  │   ┌─────────────────────────────────────────────────────┐     │    │
│  │   │  getInstances("order-service")                      │     │    │
│  │   │       │                                               │     │    │
│  │   │       ▼                                               │     │    │
│  │   │  GET /nacos/v1/ns/instance/list?serviceName=xxx       │     │    │
│  │   │       │                                               │     │    │
│  │   │       ▼                                               │     │    │
│  │   │  返回可用实例列表                                       │     │    │
│  │   │       │                                               │     │    │
│  │   │       ▼                                               │     │    │
│  │   │  负载均衡选择目标实例                                   │     │    │
│  │   └─────────────────────────────────────────────────────┘     │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

3.2 Nacos 1.x vs 2.x 对比

┌─────────────────────────────────────────────────────────────────────────┐
│                        Nacos 1.x vs 2.x 核心差异                         │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────┐          ┌─────────────────┐                       │
│  │   Nacos 1.x    │          │   Nacos 2.x     │                       │
│  │   HTTP 轮询    │          │   gRPC 长连接   │                       │
│  └────────┬────────┘          └────────┬────────┘                       │
│           │                            │                                 │
│           │  1. 发送注册请求            │                                 │
│           ├────────────────────────────►                                 │
│           │                            │  2. 返回 gRPC 端口              │
│           │◄────────────────────────────┤                                 │
│           │                            │                                 │
│           │  3. 定时轮询(5s)         │  4. gRPC 推送(<1s)            │
│           │◄────────────────────────────┤                                 │
│           │                            │                                 │
│           │                            │                                 │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                        性能对比                                  │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │                                                                  │   │
│  │   指标              │   1.x HTTP    │   2.x gRPC   │   提升     │   │
│  │   ─────────────────┼───────────────┼──────────────┼─────────────│   │
│  │   变更感知延迟      │   5-30 秒      │   < 1 秒      │   5-30倍   │   │
│  │   服务端负载        │   高(轮询)   │   低(推送)  │   降低80%  │   │
│  │   客户端负载        │   中等         │   中等        │   持平     │   │
│  │   心跳开销          │   每次请求     │   长连接保活  │   降低90%  │   │
│  │   断线重连          │   需重试       │   自动重连    │   更稳定   │   │
│  │                                                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                        端口配置变化                               │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │                                                                  │   │
│  │   Nacos 1.x:                                                     │   │
│  │   ┌─────────────────────────────────────────────────────────┐   │   │
│  │   │  8848  │  主端口(HTTP)│  控制台、API、注册发现           │   │   │
│  │   └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                  │   │
│  │   Nacos 2.x:                                                     │   │
│  │   ┌─────────────────────────────────────────────────────────┐   │   │
│  │   │  8848  │  主端口(HTTP)│  控制台、API                    │   │   │
│  │   │  9848  │  gRPC 端口    │  服务注册发现                    │   │   │
│  │   │  9849  │  gRPC 集群    │  节点间同步                      │   │   │
│  │   └─────────────────────────────────────────────────────────┘   │   │
│  │                                                                  │   │
│  │   客户端自动映射:8848 → 9848(端口 + 1000)                     │   │
│  │                                                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

3.3 服务发现源码解析

// Spring Cloud Commons - 服务发现核心接口
public interface ServiceRegistry<R extends Registration> {
    // 注册服务
    void register(R registration);
    
    // 注销服务
    void deregister(R registration);
    
    // 关闭
    void close();
    
    // 设置状态
    void setStatus(R registration, String status);
    
    // 获取状态
    <T> T getStatus(R registration);
}

// Nacos 实现 - NacosServiceRegistry
public class NacosServiceRegistry implements ServiceRegistry<NacosRegistration> {
    
    private final NacosDiscoveryProperties discoveryProperties;
    
    @Override
    public void register(NacosRegistration registration) {
        // 1. 检查是否开启注册
        if (!discoveryProperties.isRegisterEnabled()) {
            return;
        }
        
        // 2. 构建 Nacos 实例信息
        NamingService namingService = namingService();
        String serviceName = registration.getServiceId();
        String groupName = discoveryProperties.getGroup();
        
        Instance instance = buildInstance(registration);
        
        // 3. 注册服务
        namingService.registerInstance(serviceName, groupName, instance);
    }
    
    private Instance buildInstance(NacosRegistration registration) {
        Instance instance = new Instance();
        instance.setIp(registration.getHost());
        instance.setPort(registration.getPort());
        instance.setWeight(discoveryProperties.getWeight());
        instance.setClusterName(discoveryProperties.getClusterName());
        instance.setMetadata(registration.getMetadata());
        return instance;
    }
}

四、负载均衡

4.1 客户端负载均衡原理

┌─────────────────────────────────────────────────────────────────────────┐
│                        客户端负载均衡执行流程                             │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      负载均衡调用链                               │    │
│  │                                                                  │    │
│  │   RestTemplate / WebClient                                      │    │
│  │          │                                                      │    │
│  │          ▼                                                      │    │
│  │   ┌─────────────────────────────────────────────────────┐       │    │
│  │   │         LoadBalancerInterceptor                    │       │    │
│  │   │         拦截 @LoadBalanced 注解的 RestTemplate      │       │    │
│  │   └────────────────────┬────────────────────────────────┘       │    │
│  │                        │                                           │    │
│  │                        ▼                                           │    │
│  │   ┌─────────────────────────────────────────────────────┐       │    │
│  │   │         LoadBalancerClient                          │       │    │
│  │   │         1. 根据服务名获取服务实例列表                │       │    │
│  │   │         2. 委托给 LoadBalancer 选择目标实例          │       │    │
│  │   │         3. 替换 URL 中的服务名为真实 IP:Port        │       │    │
│  │   └────────────────────┬────────────────────────────────┘       │    │
│  │                        │                                           │    │
│  │                        ▼                                           │    │
│  │   ┌─────────────────────────────────────────────────────┐       │    │
│  │   │         ReactorLoadBalancer<T>                       │       │    │
│  │   │         实际执行负载均衡策略                          │       │    │
│  │   │         • RoundRobinLoadBalancer(轮询)             │       │    │
│  │   │         • RandomLoadBalancer(随机)                 │       │    │
│  │   │         • WeightedResponseTimeBalancer(加权)       │       │    │
│  │   └─────────────────────────────────────────────────────┘       │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      源码解析                                     │    │
│  ├─────────────────────────────────────────────────────────────────┤    │
│  │                                                                  │    │
│  │   // 1. 启用 @LoadBalanced 的 RestTemplate                       │    │
│  │   @Bean                                                           │    │
│  │   @LoadBalanced                                                   │    │
│  │   public RestTemplate restTemplate() {                           │    │
│  │       return new RestTemplate();                                 │    │
│  │   }                                                               │    │
│  │                                                                  │    │
│  │   // 2. 使用服务名调用                                            │    │
│  │   restTemplate.getForObject("http://order-service/api/orders",  │    │
│  │                       String.class);                            │    │
│  │                                                                  │    │
│  │   // 3. 拦截器会替换 order-service 为真实地址                     │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

4.2 负载均衡策略对比

策略类名原理适用场景优缺点
轮询RoundRobinLoadBalancer依次选择每个实例均匀分布✅ 实现简单 ✅ 请求均匀
✗ 不感知服务端状态
随机RandomLoadBalancer随机选择实例测试环境✅ 实现简单
✗ 负载不均
加权响应时间WeightedResponseTimeLoadBalancer响应时间越短权重越高性能差异大✅ 性能优化
✗ 依赖响应时间统计
最小连接数BestAvailableLoadBalancer选择连接数最少长连接场景✅ 负载更均衡
✗ 实现复杂
可用区感知ZoneAvoidanceLoadBalancer优先选择同区实例跨区部署✅ 高可用
✗ 需要多可用区

4.3 Ribbon 到 LoadBalancer 迁移

// ==================== Ribbon 旧写法(已废弃)====================
@Configuration
public class RibbonConfig {
    
    @Bean
    public IRule ribbonRule() {
        // 轮询策略
        return new RoundRobinRule();
        // 权重策略
        // return new WeightedResponseTimeRule();
        // 随机策略
        // return new RandomRule();
    }
}

// 使用 RibbonClient 指定配置
@RibbonClient(name = "order-service", configuration = RibbonConfig.class)

// ==================== LoadBalancer 新写法(推荐)====================
@Configuration
public class LoadBalancerConfig {
    
    // 替换 Ribbon 的 IRule
    @Bean
    public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
            ServiceInstanceListSupplier supplier) {
        return new RandomLoadBalancer(supplier, "random-instance");
    }
    
    // 使用 @LoadBalancerClient 指定配置
    @LoadBalancerClient(name = "order-service", 
                        configuration = LoadBalancerConfig.class)
}

// ==================== 全局默认配置 ====================
@EnableConfigurationProperties(LoadBalancerClientsProperties.class)
public class CustomLoadBalancerClientConfiguration {
    
    // 设置全局默认负载均衡策略
    @Bean
    public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(
            Environment environment,
            ServiceInstanceListSupplier supplier) {
        String name = environment.getProperty(LoadBalancerClientName.PROPERTY_NAME);
        return new RoundRobinLoadBalancer(supplier, name);
    }
}

五、配置中心

5.1 配置中心架构

┌─────────────────────────────────────────────────────────────────────────┐
│                        配置中心完整架构图                                │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│                         ┌─────────────────┐                             │
│                         │   Git Repository │                             │
│                         │                  │                             │
│                         │  ┌───────────┐  │                             │
│                         │  │ config/   │  │                             │
│                         │  │   ├── dev │  │                             │
│                         │  │   ├── test│  │                             │
│                         │  │   └── prod│  │                             │
│                         │  └───────────┘  │                             │
│                         └────────┬─────────┘                             │
│                                  │                                       │
│                                  ▼                                       │
│                         ┌─────────────────┐                             │
│                         │   Config Server │                             │
│                         │                  │                             │
│                         │  ┌───────────┐  │                             │
│                         │  │ 应用配置   │  │                             │
│                         │  │ bootstrap │  │                             │
│                         │  │ .yaml    │  │                             │
│                         │  └───────────┘  │                             │
│                         └────────┬─────────┘                             │
│                                  │                                       │
│              ┌───────────────────┼───────────────────┐                   │
│              │                   │                   │                   │
│              ▼                   ▼                   ▼                   │
│     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐              │
│     │  Service A  │     │  Service B  │     │  Service C  │              │
│     │  Instance 1 │     │  Instance 1 │     │  Instance 1 │              │
│     └─────────────┘     └─────────────┘     └─────────────┘              │
│     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐              │
│     │  Service A  │     │  Service B  │     │  Service C  │              │
│     │  Instance 2 │     │  Instance 2 │     │  Instance 2 │              │
│     └─────────────┘     └─────────────┘     └─────────────┘              │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      @RefreshScope 刷新机制                      │    │
│  ├─────────────────────────────────────────────────────────────────┤    │
│  │                                                                  │    │
│  │   1. Git 配置变更                                               │    │
│  │          │                                                      │    │
│  │          ▼                                                      │    │
│  │   2. POST /actuator/refresh  →  触发刷新                        │    │
│  │          │                                                      │    │
│  │          ▼                                                      │    │
│  │   3. ContextRefresher.refresh()                                 │    │
│  │          │                                                      │    │
│  │          ▼                                                      │    │
│  │   4. 销毁 @RefreshScope Bean                                   │    │
│  │          │                                                      │    │
│  │          ▼                                                      │    │
│  │   5. 重新创建 Bean,加载新配置                                   │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

5.2 Spring Cloud Bus 配置广播

┌─────────────────────────────────────────────────────────────────────────┐
│                      Spring Cloud Bus 配置广播                           │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                  无 Spring Cloud Bus(痛苦模式)                  │    │
│  │                                                                  │    │
│  │      Git ──▶ Config Server                                       │    │
│  │                │                                                  │    │
│  │         ┌──────┴──────┬───────┬───────┬───────┐                 │    │
│  │         ▼             ▼       ▼       ▼       ▼                 │    │
│  │     ┌─────┐      ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐              │    │
│  │     │Svc A│      │Svc B│ │Svc C│ │Svc D│ │Svc E│              │    │
│  │     │Inst1│      │Inst1│ │Inst1│ │Inst1│ │Inst1│              │    │
│  │     └─────┘      └─────┘ └─────┘ └─────┘ └─────┘              │    │
│  │                                                                  │    │
│  │     需要手动调用 100 个 /actuator/refresh 端点!                 │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│                              ▼                                          │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                  有 Spring Cloud Bus(优雅模式)                  │    │
│  │                                                                  │    │
│  │      Git ──▶ Config Server ──▶ RabbitMQ / Kafka                   │    │
│  │                                      │                            │    │
│  │                             ┌────────┴────────┐                 │    │
│  │                             ▼                 ▼                 │    │
│  │                    ┌────────────────┐ ┌────────────────┐        │    │
│  │                    │  Spring Cloud   │ │  Spring Cloud   │        │    │
│  │                    │      Bus       │ │      Bus       │        │    │
│  │                    │   (RabbitMQ)   │ │   (Kafka)      │        │    │
│  │                    └───────┬────────┘ └───────┬────────┘        │    │
│  │                            │                 │                 │    │
│  │         ┌──────────────────┼─────────────────┼──────────────┐  │    │
│  │         ▼                  ▼                 ▼              ▼  │    │
│  │     ┌─────┐ ┌─────┐    ┌─────┐ ┌─────┐    ┌─────┐ ┌─────┐    │    │
│  │     │Svc A│ │Svc B│    │Svc C│ │Svc D│    │Svc E│ │Svc F│    │    │
│  │     │Inst1│ │Inst1│    │Inst1│ │Inst1│    │Inst1│ │Inst1│    │    │
│  │     └─────┘ └─────┘    └─────┘ └─────┘    └─────┘ └─────┘    │    │
│  │                                                                  │    │
│  │     只需调用 /bus-refresh 一次,自动广播到所有实例!              │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

六、弹性容错

6.1 弹性容错四板斧

┌─────────────────────────────────────────────────────────────────────────┐
│                        弹性容错四板斧详解                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                           限流(Rate Limiting)                    │  │
│  │                                                                    │  │
│  │   问题:系统资源有限,请求量超过处理能力会崩溃                       │  │
│  │                                                                    │  │
│  │   解决方案:控制每秒/每分钟允许的请求数量                           │  │
│  │                                                                    │  │
│  │   ┌─────────────────────────────────────────────────────────┐    │  │
│  │   │                                                          │    │  │
│  │   │    请求 ──▶ [限流器] ──▶ 通过 ──▶ 处理                   │    │  │
│  │   │              │                                           │    │  │
│  │   │              │ 超过阈值                                    │    │  │
│  │   │              ▼                                           │    │  │
│  │   │           拒绝/排队                                       │    │  │
│  │   │                                                          │    │  │
│  │   └─────────────────────────────────────────────────────────┘    │  │
│  │                                                                    │  │
│  │   Sentinel 实现:                                                 │  │
│  │   • QPS 流控:每秒请求数                                          │  │
│  │   • 线程数流控:并发执行线程数                                     │  │
│  │   • 关联流控:A 关联 B,A 超过阈值限制 B                          │  │
│  │                                                                    │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                │                                        │
│                                ▼                                        │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                           熔断(Circuit Breaker)                   │  │
│  │                                                                    │  │
│  │   问题:下游服务故障,持续调用会拖垮上游服务(雪崩)                 │  │
│  │                                                                    │  │
│  │   解决方案:检测到故障后快速失败,一段时间后尝试恢复                 │  │
│  │                                                                    │  │
│  │   ┌─────────────────────────────────────────────────────────┐    │  │
│  │   │                                                          │    │  │
│  │   │   正常状态 ──▶ [统计失败率] ──▶ 超过阈值 ──▶ 熔断打开    │    │  │
│  │   │                                   │                       │    │  │
│  │   │                                   ▼                       │    │  │
│  │   │                            快速失败返回                  │    │  │
│  │   │                                   │                       │    │  │
│  │   │                            等待时间窗口                  │    │  │
│  │   │                                   ▼                       │    │  │
│  │   │                              熔断半开                    │    │  │
│  │   │                                   │                       │    │  │
│  │   │                         成功 ──▶ 熔断关闭                │    │  │
│  │   │                         失败 ──▶ 熔断打开                │    │  │
│  │   │                                                          │    │  │
│  │   └─────────────────────────────────────────────────────────┘    │  │
│  │                                                                    │  │
│  │   Sentinel 实现:                                                 │  │
│  │   • 慢调用比例:响应时间超过阈值视为慢调用                          │  │
│  │   • 异常比例:异常请求占总请求比例                                  │  │
│  │   • 异常数:异常请求数超过阈值                                     │  │
│  │                                                                    │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                │                                        │
│                                ▼                                        │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                           降级(Fallback)                         │  │
│  │                                                                    │  │
│  │   问题:服务不可用时,用户请求必须有响应                            │  │
│  │                                                                    │  │
│  │   解决方案:提供兜底逻辑,返回默认值或友好提示                       │  │
│  │                                                                    │  │
│  │   ┌─────────────────────────────────────────────────────────┐    │  │
│  │   │                                                          │    │  │
│  │   │   @SentinelResource(value = "getUser",                   │    │  │
│  │   │              fallback = "getUserFallback")                │    │  │
│  │   │   public User getUser(Long id) {                        │    │  │
│  │   │       return userService.getUser(id);                   │    │  │
│  │   │   }                                                       │    │  │
│  │   │                                                          │    │  │
│  │   │   // 兜底方法                                             │    │  │
│  │   │   public User getUserFallback(Long id, Throwable t) {    │    │  │
│  │   │       log.error("获取用户失败: {}", id, t);              │    │  │
│  │   │       return User.defaultUser();  // 返回默认用户        │    │  │
│  │   │   }                                                       │    │  │
│  │   │                                                          │    │  │
│  │   └─────────────────────────────────────────────────────────┘    │  │
│  │                                                                    │  │
│  │   降级策略:                                                      │  │
│  │   • 返回默认值                                                    │  │
│  │   • 返回缓存数据                                                  │  │
│  │   • 返回友好提示                                                  │  │
│  │   • 跳转降级页面                                                 │  │
│  │                                                                    │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                │                                        │
│                                ▼                                        │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                           重试(Retry)                            │  │
│  │                                                                    │  │
│  │   问题:网络抖动或临时故障,一次请求可能失败                         │  │
│  │                                                                    │  │
│  │   解决方案:失败后自动重试,提高请求成功率                           │  │
│  │                                                                    │  │
│  │   ┌─────────────────────────────────────────────────────────┐    │  │
│  │   │  try {                                                   │    │  │
│  │   │      return restTemplate.getForObject(url, User.class);  │    │  │
│  │   │  } catch (RestClientException e) {                       │    │  │
│  │   │      // 重试 3 次,每次间隔 100ms                         │    │  │
│  │   │      return RetryTemplate.builder()                      │    │  │
│  │   │          .maxAttempts(3)                                 │    │  │
│  │   │          .fixedBackoff(100)                              │    │  │
│  │   │          .retryableException(RestClientException.class)  │    │  │
│  │   │          .build()                                         │    │  │
│  │   │          .execute(ctx -> restTemplate.getForObject(url, │    │  │
│  │   │                                          User.class));   │    │  │
│  │   │  }                                                        │    │  │
│  │   └─────────────────────────────────────────────────────────┘    │  │
│  │                                                                    │  │
│  │   重试策略:                                                      │  │
│  │   • 固定间隔                                                      │  │
│  │   • 指数退避                                                      │  │
│  │   • 抖动                                                          │  │
│  │                                                                    │  │
│  │   注意:重试需要接口幂等性保证!                                   │  │
│  │                                                                    │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

6.2 Sentinel 核心概念

┌─────────────────────────────────────────────────────────────────────────┐
│                        Sentinel 核心概念图                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                        Sentinel 架构                             │    │
│  │                                                                  │    │
│  │   ┌──────────────┐                                               │    │
│  │   │   Dashboard  │  ◀── 管理控制台,配置规则                      │    │
│  │   │   (8080)     │                                               │    │
│  │   └──────┬───────┘                                               │    │
│  │          │                                                        │    │
│  │          │ 拉取/推送规则                                          │    │
│  │   ┌──────┴───────┐                                               │    │
│  │   │              │                                                │    │
│  │   ▼              ▼                                                │    │
│  │ ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐                   │    │
│  │ │Service A│  │Service B│  │Service C│  │Service D│                  │    │
│  │ │ Sentinel│  │ Sentinel│  │ Sentinel│  │ Sentinel│                  │    │
│  │ │ Client │  │ Client │  │ Client │  │ Client │                   │    │
│  │ └────────┘  └────────┘  └────────┘  └────────┘                   │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      滑动窗口算法                                 │    │
│  │                                                                  │    │
│  │   统计最近 1 秒内的请求(默认)                                    │    │
│  │                                                                  │    │
│  │   ┌────────────────────────────────────────────────────────┐     │    │
│  │   │  ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐  │     │    │
│  │   │  │ 100│ 100│ 100│ 100│ 100│ 100│ 100│ 100│ 100│ 100│  │     │    │
│  │   │  │ ms │ ms │ ms │ ms │ ms │ ms │ ms │ ms │ ms │ ms │  │     │    │
│  │   │  └──┬─┴────┴────┴────┴────┴────┴────┴────┴────┴────┘  │     │    │
│  │   │     │ Window 2 (当前窗口)                              │     │    │
│  │   │     │                                                 │     │    │
│  │   │     └──────▶ 滑动窗口 ◀────────────────────────        │     │    │
│  │   │                                                         │     │    │
│  │   │   当前时间 ──────────────────────────────────▶          │     │    │
│  │   └─────────────────────────────────────────────────────────┘     │    │
│  │                                                                  │    │
│  │   QPS = 统计窗口内的请求总数 / 窗口时间                           │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      Slot Chain 责任链                           │    │
│  │                                                                  │    │
│  │   ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐      │    │
│  │   │  Node  │───▶│  Stat  │───▶│   Log  │───▶│  Check  │      │    │
│  │   │ Slot   │    │  Slot   │    │  Slot   │    │  Slot   │      │    │
│  │   └─────────┘    └─────────┘    └─────────┘    └────┬────┘      │    │
│  │                                                        │           │    │
│  │   ┌─────────┐    ┌─────────┐    ┌─────────┐          │           │    │
│  │   │ WarmUp │───▶│  Flow  │───▶│  Degrade│───▶       │           │    │
│  │   │ Slot   │    │  Slot   │    │  Slot   │          │           │    │
│  │   └─────────┘    └─────────┘    └─────────┘          │           │    │
│  │                                                        ▼           │    │
│  │   ┌────────────────────────────────────────────────────────────────┐│ │
│  │   │                         执行目标方法                             ││ │
│  │   └────────────────────────────────────────────────────────────────┘│ │
│  │                                                                  │    │
│  │   职责说明:                                                      │    │
│  │   • NodeSelectorSlot:构建资源调用树                              │    │
│  │   • ClusterBuilderSlot:统计实时数据                             │    │
│  │   • StatisticSlot:记录通过/拒绝/限流/熔断统计                    │    │
│  │   • FlowSlot:根据 QPS/并发数进行流量控制                         │    │
│  │   • DegradeSlot:根据异常比例/慢调用进行熔断降级                  │    │
│  │   • WarmUpSlot:冷启动,根据系统负载预热                        │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

七、服务网关

7.1 Gateway 请求处理流程

┌─────────────────────────────────────────────────────────────────────────┐
│                        Gateway 请求处理完整流程                          │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│   请求 ──▶ Netty Server ──▶ Reactor Http Server                        │
│                                        │                                │
│                                        ▼                                │
│                         ┌────────────────────────────────┐            │
│                         │       Gateway Web Handler        │            │
│                         │                                │            │
│                         │   1. 根据请求路径匹配 Route     │            │
│                         │   2. 构建 GatewayFilterChain   │            │
│                         │   3. 依次执行 Gateway Filters  │            │
│                         └───────────────┬────────────────┘            │
│                                         │                             │
│                                         ▼                             │
│                         ┌────────────────────────────────┐            │
│                         │        Route Predicate Handler   │            │
│                         │                                │            │
│                         │   Path=/api/order/**            │            │
│                         │   ──▶ Route ID: order_route     │            │
│                         │   ──▶ URI: lb://order-service   │            │
│                         └───────────────┬────────────────┘            │
│                                         │                             │
│                                         ▼                             │
│   ┌────────────────────────────────────────────────────────────────┐  │
│   │                      Gateway Filter Chain                        │  │
│   ├────────────────────────────────────────────────────────────────┤  │
│   │                                                                 │  │
│   │  ┌──────────────────────────────────────────────────────────┐ │  │
│   │  │ 1. RemoveCachedBodyFilter  - 移除请求体缓存              │ │  │
│   │  └──────────────────────────────────────────────────────────┘ │  │
│   │  ┌──────────────────────────────────────────────────────────┐ │  │
│   │  │ 2. AdaptCachedBodyFilter    - 适配缓存请求体              │ │  │
│   │  └──────────────────────────────────────────────────────────┘ │  │
│   │  ┌──────────────────────────────────────────────────────────┐ │  │
│   │  │ 3. GatewayFilterChain 执行自定义过滤器                     │ │  │
│   │  │    • RequestSizeGatewayFilter    - 请求大小限制           │ │  │
│   │  │    • RetryGatewayFilter         - 重试机制               │ │  │
│   │  │    • SetStatusGatewayFilter     - 设置响应状态码         │ │  │
│   │  └──────────────────────────────────────────────────────────┘ │  │
│   │  ┌──────────────────────────────────────────────────────────┐ │  │
│   │  │ 4. NettyRoutingFilter         - 执行真实路由转发          │ │  │
│   │  └──────────────────────────────────────────────────────────┘ │  │
│   │  ┌──────────────────────────────────────────────────────────┐ │  │
│   │  │ 5. WebClientWriteResponseFilter - 处理响应               │ │  │
│   │  └──────────────────────────────────────────────────────────┘ │  │
│   │                                                                 │  │
│   └────────────────────────────────────────────────────────────────┘  │
│                                         │                             │
│                                         ▼                             │
│                              ┌─────────────────┐                      │
│                              │  Order Service  │                      │
│                              │  (lb://)        │                      │
│                              └─────────────────┘                      │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

7.2 动态路由配置

spring:
  cloud:
    gateway:
      # 静态路由配置
      routes:
        # 订单服务路由
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/api/order/**
            - Method=GET,POST
            - Header=X-Token, .+
          filters:
            # 路径重写:/api/order/** -> /**
            - RewritePath=/api/order/(?<segment>.*), /$\{segment}
            # 添加请求头
            - AddRequestHeader=X-Gateway, SpringCloudGateway
            # 移除响应头
            - RemoveResponseHeader=X-Powered-By
            # 请求限流
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200
            # 熔断
            - name: CircuitBreaker
              args:
                name: orderCircuitBreaker
                fallbackUri: forward:/fallback/order
        
        # 商品服务路由
        - id: product-route
          uri: lb://product-service
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/product/(?<segment>.*), /$\{segment}
        
        # 用户服务路由
        - id: user-route
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - RewritePath=/api/user/(?<segment>.*), /$\{segment}
      
      # 默认过滤器(对所有路由生效)
      default-filters:
        - AddRequestHeader=X-Request-Time, #{T(System).currentTimeMillis()}
        - RemoveRequestHeader=Cookie
      
      # 动态路由刷新(配合配置中心使用)
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
          url-expression: "'lb://' + serviceId"

八、分布式事务

8.1 Seata AT 模式原理

┌─────────────────────────────────────────────────────────────────────────┐
│                        Seata AT 模式执行流程                             │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│   ┌─────────────────────────────────────────────────────────────────┐    │
│   │                      全局事务发起                               │    │
│   │                                                                  │    │
│   │   @GlobalTransactional                                          │    │
│   │   public void createOrder(OrderDTO order) {                     │    │
│   │       // 1. 创建订单(TC 创建全局事务记录)                      │    │
│   │       orderService.create(order);                               │    │
│   │       // 2. 扣减库存(TC 创建分支事务记录)                      │    │
│   │       stockService.deduct(order.getProductId(), order.getQty());│    │
│   │       // 3. 扣减余额                                             │    │
│   │       accountService.deduct(order.getUserId(), order.getAmount());│   │
│   │   }                                                              │    │
│   │                                                                  │    │
│   └─────────────────────────────────────────────────────────────────┘    │
│                                │                                        │
│                                ▼                                        │
│   ┌─────────────────────────────────────────────────────────────────┐    │
│   │                      Branch Transaction                          │    │
│   │                                                                  │    │
│   │   Phase 1: 本地业务 + Undo Log 记录                             │    │
│   │   ┌────────────────────────────────────────────────────────┐   │    │
│   │   │  BEGIN;                                                   │   │    │
│   │   │  INSERT INTO orders (...) VALUES (...);                  │   │    │
│   │   │  INSERT INTO undo_log (...) VALUES (...); -- 记录前置镜像 │   │    │
│   │   │  COMMIT;                                                  │   │    │
│   │   └────────────────────────────────────────────────────────┘   │    │
│   │                                                                  │    │
│   │   Phase 2: 全局提交/回滚                                         │    │
│   │   ┌────────────────────────────────────────────────────────┐   │    │
│   │   │  成功 → TC 通知所有分支提交 → 删除 undo_log             │   │    │
│   │   │  失败 → TC 通知所有分支回滚 → 根据 undo_log恢复数据     │   │    │
│   │   └────────────────────────────────────────────────────────┘   │    │
│   │                                                                  │    │
│   └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│   ┌─────────────────────────────────────────────────────────────────┐    │
│   │                        Undo Log 结构                             │    │
│   │                                                                  │    │
│   │   {                                                              │    │
│   │     "branchId": 123456,                                        │    │
│   │     "xid": "192.168.1.100:8091:123456789",                    │    │
│   │     "rollbackInfo": {                                          │    │
│   │       "beforeImage": {                                        │    │
│   │         "rows": [                                              │    │
│   │           { "fields": [                                        │    │
│   │             { "name": "balance", "type": 4, "value": 1000 }    │    │
│   │           ]}                                                    │    │
│   │         ]                                                      │    │
│   │       },                                                       │    │
│   │       "afterImage": {                                         │    │
│   │         "rows": [                                              │    │
│   │           { "fields": [                                        │    │
│   │             { "name": "balance", "type": 4, "value": 900 }     │    │
│   │           ]}                                                    │    │
│   │         ]                                                      │    │
│   │       }                                                        │    │
│   │     }                                                          │    │
│   │   }                                                            │    │
│   │                                                                  │    │
│   │   回滚时:根据 beforeImage 恢复数据                             │    │
│   │                                                                  │    │
│   └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

8.2 三种模式对比

模式原理优点缺点适用场景
AT自动补偿,通过 undo log低侵入,业务无感知性能损耗,需要 undo 表一致性要求高
TCC手动补偿,Try-Confirm-Cancel性能好,无锁业务侵入大性能要求高
Saga编排补偿,正向服务长事务支持无隔离性长流程事务

九、技术选型建议

9.1 组件选型矩阵

场景推荐方案备选方案选择理由
注册中心Nacos 2.xConsul国产、活跃、功能全
配置中心Nacos ConfigApollo与注册中心合一
网关SpringCloud GatewayKongSpring 生态原生
负载均衡LoadBalancer-Spring Cloud 原生
熔断限流SentinelResilience4j功能完整、配套控制台
配置刷新Spring Cloud Bus-与 Spring 深度集成
分布式事务Seata ATSeata TCC阿里生产验证
链路追踪SkyWalkingZipkin功能更强大

9.2 版本对应关系

┌─────────────────────────────────────────────────────────────────────────┐
│                        Spring Cloud 版本兼容性                           │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│   ┌─────────────────────────────────────────────────────────────────┐    │
│   │                        版本对照表                                 │    │
│   ├─────────────────────────────────────────────────────────────────┤    │
│   │                                                                  │    │
│   │   Spring Boot    │   Spring Cloud   │   状态      │   Java 版本  │  │
│   │   ────────────  │   ────────────  │   ──────    │   ────────  │  │
│   │   3.2.x          │   2023.0.x      │   ✅ 最新   │   17+        │  │
│   │   3.1.x          │   2022.0.x      │   ✅ 稳定   │   17+        │  │
│   │   2.7.x          │   2021.0.x      │   ✅ 稳定   │   8-17       │  │
│   │   2.6.x          │   2021.0.x      │   ⚠️ 维护   │   8-17       │  │
│   │   2.5.x          │   2020.0.x      │   ⚠️ 维护   │   8-11       │  │
│   │                                                                  │  │
│   └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
│   ┌─────────────────────────────────────────────────────────────────┐    │
│   │                        组件版本对照                              │    │
│   ├─────────────────────────────────────────────────────────────────┤    │
│   │                                                                  │    │
│   │   Spring Cloud Alibaba 版本命名:Spring Cloud 版本 + 0.x.x       │    │
│   │                                                                  │    │
│   │   Spring Boot 2.7.x  ──▶  Spring Cloud 2021.0.x                 │    │
│   │                              │                                   │    │
│   │                              ▼                                   │    │
│   │                        Spring Cloud Alibaba                      │    │
│   │                              │                                   │    │
│   │                              ▼                                   │    │
│   │   ┌─────────┬─────────┬─────────┬─────────┬─────────┐          │    │
│   │   │ Nacos  │ Sentinel│ Seata   │ Dubbo   │ 组件    │          │    │
│   │   │ 2.0.x  │ 1.8.x   │ 1.5.x   │ 2.7.x   │ 版本    │          │    │
│   │   └─────────┴─────────┴─────────┴─────────┴─────────┘          │    │
│   │                                                                  │    │
│   └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

十、学习路径

┌─────────────────────────────────────────────────────────────────────────┐
│                        Spring Cloud 学习路径图                            │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                    第一阶段:基础入门(1-2周)                      │    │
│  │                                                                  │    │
│  │   目标:理解微服务架构核心概念,能够搭建简单微服务系统               │    │
│  │                                                                  │    │
│  │   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐          │    │
│  │   │   服务注册    │  │   服务调用    │  │   服务网关    │          │    │
│  │   │   与发现      │  │              │  │              │          │    │
│  │   │              │  │  OpenFeign   │  │  Gateway    │          │    │
│  │   │   Nacos      │  │              │  │              │          │    │
│  │   │   Eureka     │  │  RestTemplate│  │  动态路由    │          │    │
│  │   └──────────────┘  └──────────────┘  └──────────────┘          │    │
│  │          │                                                    │    │
│  │          ▼                                                    │    │
│  │   ┌──────────────┐                                            │    │
│  │   │   配置中心    │                                            │    │
│  │   │              │                                            │    │
│  │   │  Nacos Config│                                            │    │
│  │   │  Config Server│                                           │    │
│  │   │              │                                            │    │
│  │   │  bootstrap   │                                            │    │
│  │   │  @RefreshScope│                                          │    │
│  │   └──────────────┘                                            │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                │                                        │
│                                ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                   第二阶段:弹性容错(2-3周)                      │    │
│  │                                                                  │    │
│  │   目标:掌握高可用设计,能够应对服务故障                           │    │
│  │                                                                  │    │
│  │   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐          │    │
│  │   │   负载均衡    │  │   熔断限流    │  │   服务降级    │          │    │
│  │   │              │  │              │  │              │          │    │
│  │   │ LoadBalancer │  │  Sentinel    │  │  @SentinelRes│          │    │
│  │   │              │  │              │  │  ource       │          │    │
│  │   │  轮询/加权   │  │  FlowControl │  │              │          │    │
│  │   │  最小连接   │  │  Degrade     │  │  Fallback   │          │    │
│  │   └──────────────┘  └──────────────┘  └──────────────┘          │    │
│  │          │                                                    │    │
│  │          ▼                                                    │    │
│  │   ┌──────────────┐  ┌──────────────┐                          │    │
│  │   │   客户端重试  │  │   分布式事务  │                          │    │
│  │   │              │  │              │                          │    │
│  │   │  Spring Retry│  │  Seata       │                          │    │
│  │   │              │  │              │                          │    │
│  │   │  RetryTemplate│ │  AT/TCC/Saga │                          │    │
│  │   │              │  │              │                          │    │
│  │   │  Backoff     │  │  全局锁      │                          │    │
│  │   └──────────────┘  └──────────────┘                          │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                │                                        │
│                                ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                   第三阶段:可观测性(2周)                        │    │
│  │                                                                  │    │
│  │   目标:掌握链路追踪和监控,能够定位性能问题                       │    │
│  │                                                                  │    │
│  │   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐          │    │
│  │   │   链路追踪    │  │   监控告警    │  │   日志聚合    │          │    │
│  │   │              │  │              │  │              │          │    │
│  │   │  Sleuth      │  │  Prometheus  │  │   ELK        │          │    │
│  │   │              │  │              │  │              │          │    │
│  │   │  Zipkin      │  │  Grafana    │  │   Logstash  │          │    │
│  │   │              │  │              │  │              │          │    │
│  │   │  TraceId     │  │  Dashboard  │  │   Kibana    │          │    │
│  │   └──────────────┘  └──────────────┘  └──────────────┘          │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                │                                        │
│                                ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                   第四阶段:安全认证(1-2周)                      │    │
│  │                                                                  │    │
│  │   目标:掌握微服务认证方案,能够设计安全架构                        │    │
│  │                                                                  │    │
│  │   ┌────────────────────────────────────────────────────────┐    │    │
│  │   │                                                         │    │    │
│  │   │                    OAuth2 + JWT                        │    │    │
│  │   │                                                         │    │    │
│  │   │   ┌─────────┐     ┌─────────┐     ┌─────────┐         │    │    │
│  │   │   │  授权   │────▶│  颁发   │────▶│  验证   │         │    │    │
│  │   │   │  服务器 │     │  Token  │     │  Token  │         │    │    │
│  │   │   └─────────┘     └─────────┘     └─────────┘         │    │    │
│  │   │                                                         │    │    │
│  │   │   Spring Security OAuth2 / JWT / Spring Security       │    │    │
│  │   │                                                         │    │    │
│  │   └─────────────────────────────────────────────────────────┘    │    │
│  │                                                                  │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

十一、核心知识点汇总

11.1 知识图谱 MindMap

┌─────────────────────────────────────────────────────────────────────────┐
│                      Spring Cloud 知识图谱                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│                              Spring Cloud                               │
│                                  │                                       │
│        ┌─────────────┬───────────┼───────────┬─────────────┐           │
│        │             │           │           │             │           │
│        ▼             ▼           ▼           ▼             ▼           │
│   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐      │
│   │服务治理  │  │配置管理  │  │弹性容错  │  │网关路由  │  │可观测性  │      │
│   └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘      │
│        │            │            │            │            │           │
│   ┌────┴────┐  ┌────┴────┐  ┌────┴────┐  ┌────┴────┐  ┌────┴────┐     │
│   │注册发现  │  │配置加载  │  │限流      │  │路由匹配  │  │链路追踪  │     │
│   │负载均衡  │  │热刷新    │  │熔断      │  │过滤器链  │  │日志聚合  │     │
│   │健康检查  │  │多环境    │  │降级      │  │限流认证  │  │监控告警  │     │
│   │心跳续约  │  │消息广播  │  │重试      │  │跨域      │  │健康检查  │     │
│   └─────────┘  └─────────┘  └─────────┘  └─────────┘  └─────────┘     │
│                                                                          │
│                              关联系列                                   │
│   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐     │
│   │框架原理  │  │弹性容错  │  │安全认证  │  │微服务网关│  │数据存储  │     │
│   │          │  │          │  │          │  │          │  │          │     │
│   │SpringBoot│  │Sentinel │  │OAuth2   │  │Gateway  │  │Redis    │     │
│   │Spring    │  │Seata    │  │JWT      │  │限流     │  │MySQL    │     │
│   │SpringMVC │  │          │  │SpringSec│  │跨域     │  │ES       │     │
│   └─────────┘  └─────────┘  └─────────┘  └─────────┘  └─────────┘     │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

11.2 面试高频问题

类别问题答案要点
注册发现Nacos 和 Eureka 的区别?Nacos 支持配置中心、国产、2.0 gRPC;Eureka 已停更
Nacos 2.0 为什么更快?gRPC 推送 vs HTTP 轮询,<1s vs 5-30s
负载均衡Ribbon 和 LoadBalancer 的区别?LB 是 Ribbon 的替代品,函数式编程
负载均衡策略有哪些?轮询、随机、加权、最小连接数
配置中心@RefreshScope 如何实现热刷新?销毁 Bean + 重新创建
Spring Cloud Bus 的作用?配置变更广播到所有实例
弹性容错Sentinel 和 Hystrix 的区别?Sentinel 更活跃、功能更完整
熔断器的三种状态?关闭→打开→半开
分布式事务AT 和 TCC 的区别?AT 自动补偿 vs TCC 手动补偿
Seata 的全局锁何时释放?分支事务完成后释放
网关Gateway 和 Zuul 的区别?Gateway 基于 WebFlux,性能更高
如何实现限流?Redis + RequestRateLimiter

十二、常见问题与解决方案

12.1 服务注册问题

问题原因解决方案
服务注册失败网络不通检查防火墙、安全组
注册开关未开启spring.cloud.nacos.discovery.registerEnabled=true
端口未开放开放 Nacos 8848/9848 端口
实例被剔除心跳超时检查心跳间隔(默认 5s)和超时时间(默认 15s)
服务端负载高开启保护阈值 nacos.instances.protected.enabled

12.2 负载均衡问题

问题原因解决方案
负载不均权重未配置调整实例权重
最小连接数未生效检查 LoadBalancer 实现
服务调用失败服务未注册检查注册中心连接
实例不健康检查健康检查配置

12.3 配置刷新问题

问题原因解决方案
配置未生效未加 @RefreshScopeBean 上添加注解
未暴露 actuator 端点配置 management.endpoints.web.exposure.include=refresh
静态变量未刷新使用 @ConfigurationProperties 绑定配置

12.4 熔断降级问题

问题原因解决方案
所有请求都降级熔断阈值过低调高异常比例/慢调用比例阈值
统计窗口过短增大统计窗口时间
降级方法未执行方法签名错误降级方法需要与原方法参数一致
注解使用错误使用 fallback 而非 fallbackFactory

十三、总结

13.1 核心要点回顾

┌─────────────────────────────────────────────────────────────────────────┐
│                      微服务架构核心要点总结                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  1. 服务治理:注册发现 + 负载均衡                                 │    │
│  │     • Nacos 2.0 使用 gRPC,性能提升 5-30 倍                      │    │
│  │     • LoadBalancer 是 Ribbon 的替代方案                           │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  2. 配置管理:配置中心 + 消息总线                                 │    │
│  │     • @RefreshScope 实现配置热刷新                               │    │
│  │     • Spring Cloud Bus 实现配置广播                              │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  3. 弹性容错:限流 + 熔断 + 降级 + 重试                          │    │
│  │     • Sentinel 是主流熔断限流方案                                │    │
│  │     • 四板斧:限流→熔断→降级→重试                               │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  4. 网关路由:路由 + 过滤器 + 安全                               │    │
│  │     • Gateway 基于 WebFlux,性能优于 Zuul                        │    │
│  │     • 过滤器链是核心机制                                        │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  5. 分布式事务:AT + TCC + Saga                                 │    │
│  │     • AT 模式低侵入,通过 undo log 自动补偿                      │    │
│  │     • 根据场景选择合适的事务模式                                 │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

13.2 与其他系列关联

本系列关联系列关联内容
微服务架构框架原理SpringBoot 自动装配、Spring 核心机制
微服务网关Gateway 动态路由、限流、过滤器链
弹性容错Sentinel 熔断限流、Seata 分布式事务
安全认证OAuth2 + JWT 微服务认证
可观测性链路追踪、健康检查、监控告警
数据存储Redis 缓存、MySQL 事务

参考资料


更多推荐