Skip to content

典型分布式场景方案

理论学了一大堆,最终还是要落地。

这一模块,将分布式理论与工程实践结合,讲解真实生产环境中的典型场景:多级缓存、统一认证、文件存储、多机房部署……

每一个场景,都是前人踩过的坑。

模块速览

典型场景方案分为六大类:

章节篇数核心内容
统一认证与 SSO5 篇Session 共享、Token、JWT、CAS、OAuth2
多级缓存架构6 篇本地缓存、Redis、穿透/击穿/雪崩、热点数据
分布式文件存储4 篇MinIO、FastDFS、分片上传、CDN
多机房与数据同步4 篇同城双活、异地多活、binlog 同步
流量控制与弹性策略5 篇全链路限流、削峰、降级、重试风暴
数据处理与批任务4 篇分片任务、数据同步、唯一执行、定时任务
统一异常与日志4 篇全局异常、链路追踪、日志聚合、可观测性

场景与方案对照

┌──────────────────┬──────────────────────────────────────┐
│ 场景             │ 典型方案                              │
├──────────────────┼──────────────────────────────────────┤
│ 高并发读          │ 多级缓存 + 热点探测                   │
│ 高并发写          │ 消息队列削峰 + 分库分表               │
│ 缓存一致性         │ Cache Aside + 延迟双删              │
│ 缓存异常          │ 穿透(布隆)、击穿(互斥)、雪崩(打散)│
│ 统一认证          │ JWT / Spring Session / CAS           │
│ 文件存储          │ MinIO / FastDFS + CDN               │
│ 多机房部署         │ 同城双活 / 异地多活 / 单元化         │
│ 链路追踪          │ TraceId + MDC / Skywalking           │
│ 服务限流          │ Sentinel / 令牌桶 / 滑动窗口           │
└──────────────────┴──────────────────────────────────────┘

面试高频问题

Q1:如何保证缓存和数据库一致性?

「没有完美的方案,只有最适合的方案。 方案一 Cache Aside:读先查缓存、写先更新数据库再删缓存(不是更新缓存!)。 方案二 延迟双删:更新数据库后,延迟一段时间再删除缓存,解决并发时的脏读。 关键是要理解每种方案的一致性级别,不要追求过度的强一致。」

Q2:如何设计一个分布式 Session 方案?

「两种思路:Session 共享 vs 无状态 Token。 Session 共享:用 Spring Session + Redis,优点是与传统架构一致,缺点是有状态。 Token 方案:用 JWT,优点是无状态可扩展,缺点是 Token 撤销困难。 大多数互联网场景选 Token,企业内部系统可选 Session。」

Q3:如何实现接口幂等?

「四种方案:

  1. Token + Redis:接口防重令牌
  2. 唯一键约束:数据库主键或唯一索引
  3. 状态机:订单状态只能「创建→支付→完成」,不能逆向
  4. 分布式锁:锁住业务 ID 选择依据是业务场景,不是越多越好。」

学习建议

场景方案的学习,最重要的是理解问题的本质

1. 多级缓存:理解每一层缓存的意义和取舍
2. 统一认证:理解 Session 和 Token 的本质区别
3. 文件存储:理解对象存储和文件系统的适用场景
4. 多机房部署:理解 CAP 理论在工程中的体现
5. 流量控制:理解限流的本质是「保护系统」
6. 可观测性:理解 Metrics、Tracing、Logging 的关系

记住:场景方案的答案不是唯一的,重要的是理解为什么这样选。

基于 VitePress 构建