Spring Cloud 知识体系全景复盘
Spring Cloud 的知识点分散在几十个组件里,复盘的价值在于把它们放进同一张图:一条请求从哪里进、经过哪些治理、怎么保证一致与可靠、出了问题怎么看。本文以脑图形式梳理调用链路、配置管理、服务治理、可观测、安全、部署、事务、任务、线程池九大维度,并给出每个维度的核心要点。
一、知识全景脑图
Spring Cloud 知识体系
├─ 调用链路
│ ├─ 网关 Gateway(路由/谓词/过滤器链)
│ ├─ 服务发现 Nacos(注册/心跳/长轮询)
│ ├─ 负载均衡 LoadBalancer(轮询/权重/灰度)
│ └─ 声明式调用 OpenFeign(动态代理/编码解码)
├─ 配置管理
│ ├─ Config / Nacos Config(dataId/分组/命名空间)
│ ├─ 动态刷新(长轮询/@RefreshScope/Bus)
│ └─ 优先级与加载顺序
├─ 服务治理
│ ├─ 熔断 Sentinel(滑动窗口/规则)
│ ├─ 限流(QPS/并发/热点/系统)
│ ├─ 降级(兜底/隔离)
│ └─ 容错 Resilience4j
├─ 可观测性
│ ├─ 链路追踪(TraceId/Span/SkyWalking)
│ ├─ 指标(Micrometer/Prometheus/Grafana)
│ └─ 日志(MDC 关联/告警)
├─ 安全
│ ├─ 网关统一鉴权(JWT/白名单)
│ ├─ RBAC 权限模型
│ ├─ OAuth2/Spring Security
│ └─ API 签名验签(防篡改/防重放)
├─ 部署与运维
│ ├─ 容器化(Dockerfile 多阶段/优雅关闭)
│ ├─ Kubernetes(Pod/Deployment/HPA)
│ ├─ CI/CD(GitLab CI/流水线)
│ └─ 发布策略(蓝绿/滚动/灰度)
├─ 分布式事务
│ ├─ 理论(CAP/BASE/2PC/3PC/TCC/SAGA)
│ ├─ Seata(AT/TC/TM/RM/undo_log)
│ └─ 消息最终一致性
├─ 定时任务
│ ├─ XXL-Job(调度中心/执行器/分片)
│ ├─ Elastic-Job(ZK 分片)
│ └─ PowerJob(DAG 工作流)
└─ 线程池
├─ ThreadPoolExecutor(核心/队列/拒绝)
├─ 动态线程池(配置中心热更新)
└─ 虚拟线程(Loom/高吞吐)二、调用链路维度
一次请求的完整链路
一次请求穿越的组件:
客户端 → Gateway → LoadBalancer → OpenFeign → 业务服务
→ Sentinel → Seata(可选)→ MyBatis → 数据库关键知识点:
├─ Gateway 路由三元组:Route / Predicate / Filter
├─ 过滤器链顺序:GlobalFilter + 路由过滤器按 order 排序
├─ LoadBalancer:接口化,可自定义灰度策略
├─ OpenFeign:JDK 动态代理 + 方法解析 + 编解码
└─ 上下文透传:TraceId / X-User-Id / Seata XID三、配置管理维度
配置体系
配置分层:
├─ 本地配置(application.yml)
├─ 远程配置(Nacos Config / Config Server)
└─ 加载优先级(本地兜底 → 远程覆盖)
关键知识点:
├─ dataId = 服务名 + 环境 + 后缀
├─ 命名空间 / 分组隔离环境
├─ 动态刷新机制:长轮询 + MD5 比对 + Listener
└─ @RefreshScope:代理 Bean 重建Bus 动态刷新
Bus 传播:
├─ 配置中心变更 → Bus 发送 RefreshRemoteApplicationEvent
├─ 各服务监听 → 触发 refresh
└─ 适用多服务批量刷新场景四、服务治理维度
熔断限流降级
Sentinel 核心概念:
├─ 资源:entry 保护的代码段
├─ 规则:流控(QPS/线程)、熔断(慢调用/异常)、热点、系统
├─ 统计:LeapArray 滑动窗口
└─ 数据源:Nacos 动态下发规则
治理组合:
├─ 入口限流:保护服务自身
├─ 依赖熔断:保护下游与自身
└─ 兜底降级:快速失败返回默认值隔离与容错
隔离手段:
├─ 线程池隔离(Hystrix/自定义)
├─ 信号量隔离(Sentinel/Resilience4j Bulkhead)
└─ 依赖分级(核心/非核心,非核心可降)
容错模式:
├─ 超时 + 重试(注意幂等)
├─ 熔断(快速失败,半开探测)
└─ 降级(缓存/默认值/提示)五、可观测性维度
三支柱
可观测三支柱:
├─ Metrics:Micrometer → Prometheus → Grafana
│ ├─ JVM、线程池、接口耗时、QPS、错误率
│ └─ SLO 告警
├─ Tracing:SkyWalking / Zipkin
│ ├─ Trace 贯穿:TraceId 生成与透传
│ └─ Span 关联:服务间调用耗时分层
└─ Logging:日志 + MDC(traceId)
└─ 日志聚合检索(按 TraceId 查全链路)实践要点:
├─ 日志必须带 traceId(MDC)
├─ 指标命名规范统一
└─ 告警分级:WARN / ERROR / FATAL六、安全维度
安全分层
安全分层模型:
接入层 → 网关鉴权/限流/WAF
传输层 → HTTPS / mTLS
认证层 → OAuth2 / JWT
授权层 → RBAC
接口层 → API 签名验签
数据层 → 脱敏/加密关键知识点:
├─ 网关统一鉴权:白名单 + JWT 校验 + 透传用户头
├─ RBAC:用户 → 角色 → 权限(五表模型)
├─ Spring Security:过滤器链 + SecurityContext
└─ API 签名:时间戳 + nonce + HMAC(防重放)七、部署与运维维度
容器与编排
部署体系:
├─ 镜像构建:Dockerfile 多阶段构建(builder + runtime)
├─ 编排:Kubernetes(Deployment / Service / HPA)
├─ 配置:ConfigMap / Secret
└─ 发布:蓝绿 / 滚动 / 灰度
发布策略对比:
├─ 蓝绿:两套环境切换,成本高回滚快
├─ 滚动:分批替换,省资源有风险
└─ 灰度:按权重/条件放量,可控性强CI/CD 与容量
CI/CD 流水线:
├─ 代码提交 → 单元测试 → 构建镜像 → 部署到环境
├─ 多环境:dev / test / prod 流水线差异
└─ 回滚:镜像版本管理 + 快速回退
容量规划:
├─ Little 定律:并发 = QPS × RT
├─ 压测验证容量 → HPA 自动扩缩
└─ 缩容冷却(稳定后缩)八、分布式事务维度
事务方案全景
分布式事务方案:
├─ 强一致:
│ ├─ 2PC / 3PC(数据库 XA)
│ └─ Seata AT(镜像 + 全局锁)
├─ 最终一致:
│ ├─ TCC(Try/Confirm/Cancel)
│ ├─ SAGA(状态机/补偿)
│ └─ 消息最终一致性(本地消息表/事务消息)
└─ 选型:
资金/强一致 → AT/TCC
订单/容忍延迟 → MQ 最终一致Seata 核心:
├─ 三组件:TC(协调)/ TM(发起)/ RM(分支)
├─ AT 模式:前后镜像 + undo_log + 全局锁
└─ 与 Spring Cloud 集成:XID 透传 + 数据源代理九、定时任务与线程池维度
定时任务
任务框架对比:
├─ XXL-Job:调度中心 + 执行器,路由/分片/故障转移
├─ Elastic-Job:ZK 协调分片
└─ PowerJob:DAG 工作流
实践要点:
├─ 幂等(唯一键/状态机/分布式锁)
├─ 依赖编排(超时/重试/禁环)
└─ 告警监控(失败/超时/数据异常)线程池
线程池知识:
├─ ThreadPoolExecutor:核心线程 / 队列 / 最大线程 / 拒绝策略
├─ 动态线程池:配置中心热更新(Hippo4j / Dynamic-TP)
├─ 监控:活跃线程 / 排队 / 拒绝告警
└─ 虚拟线程:Loom,高并发 I/O 场景吞吐提升隔离实践:
├─ 核心链路与旁路任务分线程池
├─ 下游超时防止线程被占用
└─ 拒绝策略兜底(CallerRuns / 降级)十、维度间的关联
一条请求串联九个维度
以"下单"为例串联全部维度:
调用链路:网关 → 订单服务 → 商品服务(Feign)
配置管理:下单阈值配置(Nacos 动态下发)
服务治理:订单接口限流、库存服务熔断
可观测性:TraceId 贯穿、下单耗时指标
安全:网关鉴权 + 用户头透传
部署运维:版本灰度发布、实例扩缩容
分布式事务:订单 + 扣库存全局事务(Seata)
定时任务:超时未支付订单自动取消(XXL-Job)
线程池:下单异步处理线程池监控复盘方法
复盘要点:
├─ 每个维度抓"一个核心机制"
│ ├─ 发现:心跳 + 缓存
│ ├─ 配置:长轮询 + 刷新
│ ├─ 限流:滑动窗口
│ ├─ 事务:镜像 + 补偿
│ └─ 追踪:TraceId 透传
├─ 每个组件抓"入口类"
│ ├─ Gateway:RoutePredicateHandlerMapping
│ ├─ Feign:InvocationHandler
│ ├─ Sentinel:CtSph
│ └─ Seata:GlobalTransactionalInterceptor
└─ 用一条业务请求把所有组件串起来总结
Spring Cloud 知识体系的九个维度可以压缩成三条主线:请求怎么走(调用链路 + 配置 + 治理)、数据怎么保(事务 + 任务 + 线程池)、系统怎么管(可观测 + 安全 + 部署)。每个维度抓住一个核心机制和一个入口类,再用一条真实业务请求把它们串成整体,就能形成"组件点 → 维度线 → 体系面"的完整认知。