分布式锁 → 事务 → 一致性方案 追问链#
追问路径#
Q: 分布式锁有哪些实现方案?
→ Redis(SET NX EX)、ZooKeeper(临时顺序节点)、MySQL(唯一索引/排他锁)
Q: Redis分布式锁具体怎么实现?
→ SET key uniqueValue NX EX timeout + Lua脚本原子释放(判断value匹配再删)
Q: 锁过期了业务没执行完怎么办?
→ Redisson看门狗:默认lockWatchdogTimeout=30s,后台每10s检查续期到30s;业务完成后取消
├─ Q: ZooKeeper分布式锁和Redis比有什么区别?
│ → ZK用临时顺序节点+Watcher,天然无过期问题,CP强一致但性能比Redis低一个数量级
│ Q: 分布式事务怎么选方案?
│ → 强一致:2PC(XA)/Seata AT(自动补偿);最终一致:TCC(侵入大)/SAGA(长事务)/事务消息(推荐)
│ Q: TCC的三个阶段具体怎么做?
│ → Try:预留资源(冻结库存) → Confirm:提交(扣减冻结) → Cancel:回滚(释放冻结);需要幂等+防悬挂
└─ Q: CAP定理怎么理解?实际系统怎么选?
→ P(分区容错)必须保证;CP(ZK/金融场景)牺牲可用性;AP(Eureka/电商场景)牺牲强一致
Q: BASE理论和CAP什么关系?
→ BASE是CAP中AP方向的实践落地:基本可用(降级) + 软状态(中间态) + 最终一致(异步补偿)plaintext涉及知识点#
- 分布式锁方案对比 — Redis/ZK/MySQL三种方案优劣
- Redis分布式锁 — SET NX EX + Lua释放
- Redisson分布式锁实现 — 看门狗、可重入、公平锁
- Zookeeper-ZAB协议 — ZK的一致性协议基础
- 分布式事务方案 — 各方案全景对比
- 2PC与3PC — 两阶段/三阶段提交
- TCC事务模式 — Try-Confirm-Cancel
- SAGA事务模式 — 长事务编排与补偿
- Seata框架原理 — AT/TCC/SAGA/XA四种模式
- CAP定理 — 分布式系统根本约束
- BASE理论 — 最终一致性的理论基础
- 数据一致性方案 — 强一致 vs 最终一致的选型
核心串联逻辑#
- 锁方案选型:Redis性能最高(10万+ QPS)但有主从切换丢锁风险;ZK强一致但性能低(~万级QPS);MySQL最简单但性能最差
- Redisson看门狗:解决”锁过期业务未完成”——后台线程定时续期,客户端宕机则不续期自动释放
- 分布式事务谱系:强一致(2PC/XA → Seata AT) → 最终一致(TCC → SAGA → 事务消息),侵入性和性能递减
- CAP落地:CP选ZK/etcd(金融转账),AP选Nacos临时实例/Eureka(电商服务发现)
- 代码示例:
java// Redisson分布式锁用法 RLock lock = redisson.getLock("order:" + orderId); try { if (lock.tryLock(5, 30, TimeUnit.SECONDS)) { // 等待5s,持有30s // 看门狗自动续期,业务完成后unlock取消 } } finally { lock.unlock(); }
面试回答串联#
30秒速答#
“分布式锁首选Redis(SET NX EX)配合Redisson看门狗续期,ZK强一致但性能低。分布式事务强一致用Seata AT,最终一致推荐事务消息。CAP中P必选,根据业务选CP或AP,BASE是AP方向的落地实践。“
2分钟展开答#
“分布式锁三种方案:Redis用SET key NX EX加锁+Lua脚本原子释放,性能最高达10万+ QPS,但主从切换时有丢锁风险。Redisson通过看门狗机制解决锁过期问题——默认30s过期,后台每10s续期,客户端宕机则自然超时释放。ZooKeeper用临时顺序节点实现,天然不存在过期问题且CP强一致,但性能低一个数量级。分布式事务方案从强到弱:2PC/XA全局锁定性能差,Seata AT通过undo log实现自动补偿比较轻量;TCC由业务实现Try/Confirm/Cancel三阶段侵入性大但灵活;事务消息通过半消息+本地事务+回查实现最终一致性,是大多数场景的首选。CAP定理中P(分区容错)必须保证,金融场景选CP保证一致性,电商场景选AP保证可用性。BASE理论是AP方向的实践落地——基本可用(降级服务)、软状态(允许中间态)、最终一致(异步补偿)。“
相关追问链#
- MySQL事务-分布式事务-CAP追问链 — 从单机事务到分布式事务的演进
- Redis缓存问题-一致性-分布式锁追问链 — Redis分布式锁的深入实现
- MQ可靠性-顺序-积压-事务消息追问链 — 事务消息是分布式事务的最终一致方案