典型分布式场景方案
理论学了一大堆,最终还是要落地。
这一模块,将分布式理论与工程实践结合,讲解真实生产环境中的典型场景:多级缓存、统一认证、文件存储、多机房部署……
每一个场景,都是前人踩过的坑。
模块速览
典型场景方案分为六大类:
| 章节 | 篇数 | 核心内容 |
|---|---|---|
| 统一认证与 SSO | 5 篇 | 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:如何实现接口幂等?
「四种方案:
- Token + Redis:接口防重令牌
- 唯一键约束:数据库主键或唯一索引
- 状态机:订单状态只能「创建→支付→完成」,不能逆向
- 分布式锁:锁住业务 ID 选择依据是业务场景,不是越多越好。」
学习建议
场景方案的学习,最重要的是理解问题的本质:
1. 多级缓存:理解每一层缓存的意义和取舍
2. 统一认证:理解 Session 和 Token 的本质区别
3. 文件存储:理解对象存储和文件系统的适用场景
4. 多机房部署:理解 CAP 理论在工程中的体现
5. 流量控制:理解限流的本质是「保护系统」
6. 可观测性:理解 Metrics、Tracing、Logging 的关系记住:场景方案的答案不是唯一的,重要的是理解为什么这样选。
