P5 · 分布式与高并发(W23-26)
目标:能落地分布式锁、分布式事务、消息队列、能设计秒杀架构 验收:能输出《12306 抢票系统设计方案》
一、本阶段核心知识点
A. 分布式理论基础
1. CAP 三选二(必背)
- Consistency / Availability / Partition tolerance
- CP 选型:Zookeeper、Etcd
- AP 选型:Eureka、Nacos(CP 模式可配)
2. BASE 理论
- Basically Available / Soft state / Eventual consistency
- 与 ACID 的对立统一
3. 一致性算法
- 2PC(两阶段提交)
- 3PC(改进)
- Paxos
- Raft(重点:Leader 选举 + Log Replication + Snapshot)
- ZAB(Zookeeper Atomic Broadcast)
B. 分布式锁(重点)
1. 实现方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
SETNX + EXPIRE |
简单 | 原子性差 |
SET key value NX EX |
原子 | 误删风险 |
| Redisson | 成熟、可重入、Lua 续期 | 需引入 |
| Zookeeper | 强一致 | 性能低 |
| Etcd | 强一致 | 运维成本 |
| MySQL 唯一索引 | 易理解 | 性能差、易死锁 |
2. Redisson 源码
RLock.tryLock()流程- 看门狗(WatchDog)自动续期原理
- 公平锁 vs 非公平锁
MultiLock/RedLock集群锁
3. 锁的陷阱
- 误删:必须用 Lua 释放(检查 value + 删除的原子性)
- 脑裂:主从切换导致双客户端持锁
- RedLock 算法:至少半数节点加锁成功
C. 分布式事务(5 种方案对比)
| 方案 | 一致性 | 性能 | 复杂度 | 适用 |
|---|---|---|---|---|
| 2PC | 强 | 低 | 中 | 数据库层 |
| 3PC | 强 | 低 | 高 | 极少用 |
| TCC | 最终 | 中 | 高 | 金融 |
| 本地消息表 | 最终 | 高 | 中 | 通用 |
| MQ 事务消息 | 最终 | 高 | 低 | RocketMQ |
| Seata AT | 最终 | 中 | 低 | 通用(推荐) |
D. 消息队列(重点)
1. RocketMQ(推荐)
- 架构:NameServer / Broker / Producer / Consumer
- 消息模型:Topic + Queue + Tag
- 高可用:Dledger 多副本、Raft 选举
- 4 种消息类型:普通 / 顺序 / 事务 / 延迟
- 消息幂等、消息顺序、消息堆积
- Consumer 负载均衡、广播消费
2. Kafka(选学)
- 架构:Broker / Controller / ZooKeeper(KRaft 不再依赖)
- 分区、副本 ISR
- Exactly Once 语义
- 适用:大数据日志、流式计算
3. RabbitMQ(选学)
- 适用:小型业务、复杂路由
- 交换机:direct / topic / fanout / headers
4. 消息三大问题(必背)
- 消息丢失:生产确认 + 持久化 + 消费确认
- 消息重复:幂等 + 唯一业务键
- 消息顺序:单分区 + 顺序消费
- 消息积压:增加消费者 + 临时扩容
E. 分布式 ID
- 雪花算法(Snowflake):1 bit 符号 + 41 bit 时间戳 + 10 bit 机器 + 12 bit 序列
- Leaf(美团)、TinyID(滴滴)、UidGenerator(百度)
- 数据库号段模式
F. 限流 / 熔断 / 降级
1. 限流算法
- 计数器(固定窗口、滑动窗口)
- 令牌桶(Guava RateLimiter)
- 漏桶(流量整形)
2. Sentinel 实战
- 流控模式:直接 / 关联 / 链路
- 流控效果:快速失败 / Warm Up / 排队等待
- 熔断降级:慢调用比例 / 异常比例 / 异常数
- 热点参数限流
- 系统自适应限流
G. 分布式搜索引擎(Elasticsearch 入门)
- 倒排索引原理
- 集群、分片、副本
- DSL:match / term / bool / aggregations
- IK 分词器
- 与 MySQL 数据同步(Canal + MQ)
二、任务清单(可勾选打卡)
Week 23 · 分布式理论与锁
- 总结 CAP / BASE / 2PC / 3PC / Paxos / Raft 对比表
- 讲解 Paxos 与 Raft 选举算法,画状态机
- 演示 Redis SETNX + Lua 的分布式锁
- 集成 Redisson 演示分布式锁 + 看门狗
- 演示 ZK 分布式锁 demo
Week 24 · 分布式事务与消息
- 用 Spring Cloud Stream + RocketMQ 跑通简单收发
- 用 Seata AT 模式实现"下单扣库存扣余额"
- 用 RocketMQ 事务消息实现分布式事务
- 演示消息幂等:唯一业务键 + 消费去重
Week 25 · 分布式 ID + 限流
- 用雪花算法实现分布式 ID 生成器
- 用 Hutool 的 Snowflake、百度 UidGenerator 对比
- 用 Sentinel 实现 4 种流控规则
- 用 Resilience4j 实现服务熔断降级
- 用 Sleuth + Zipkin 做链路追踪
Week 26 · 分布式搜索与综合实战
- docker-compose 搭建 ES 集群(3 节点)
- 用 Spring Data Elasticsearch 实现 CRUD
- 用 Canal + MQ 实现 MySQL → ES 增量同步
- 输出《12306 抢票系统设计方案》md(覆盖高并发完整方案)
三、阶段验收标准
✅ 能独立完成: - 现场画 CAP/BASE 决策图 - 写出 Redisson 分布式锁的核心 Lua 脚本 - 给一个秒杀场景,能输出完整方案 - 用 RocketMQ 实现可靠消息投递(不丢、不重复、有序) - 用 Sentinel 实现精细化限流
四、产出物
notes/P5-week23-分布式理论与锁.mdnotes/P5-week24-分布式事务与消息.mdnotes/P5-week25-限流降级.mdnotes/P5-week26-ES与综合.mddemo/distributed-lock/Redisson demodemo/seata/Seata AT demoreport/12306抢票系统设计方案.md
五、面试高频问题预告
- CAP 是什么?为什么只能三选二?
- Redis 分布式锁怎么实现?Redisson 看门狗原理?
- RedLock 真的安全吗?Martin Kleppmann 的质疑?
- 消息队列怎么保证不丢失、不重复、有序?
- 秒杀系统怎么设计?限流、降级、削峰怎么落地?
- 雪花算法结构?为什么 41 bit 时间戳?