分布式系统核心概念
1. CAP理论
CAP理论指出,分布式系统最多同时满足以下三项中的两项:
- 一致性(CC):所有节点访问同一份最新数据。
- 可用性(AA):每个请求都能在合理时间内获得非错误响应。
- 分区容错性(PP):系统在网络分区(节点间通信中断)时仍能运行。
取舍场景:
- 当网络分区(PP)发生时,需在CC与AA间选择:
- 选择CC(如金融系统):拒绝写入以保持一致性,牺牲可用性。
- 选择AA(如社交平台):返回旧数据,牺牲一致性。
2. 分布式事务
解决跨服务或跨数据库操作的数据一致性问题。
(1)2PC(两阶段提交)
- 流程:
- 准备阶段:协调者询问所有参与者“能否提交”。
- 提交阶段:若所有参与者同意,协调者通知提交;否则回滚。
- 问题:协调者单点故障可能导致参与者长期阻塞。
(2)TCC(Try-Confirm-Cancel)
- 三阶段:
- Try:预留资源(如冻结库存)。
- Confirm:提交(如扣减库存)。
- Cancel:回滚(如解冻库存)。
- 缺点:需业务代码实现补偿逻辑,侵入性强。
(3)Seata的AT模式
- 原理:
- 自动生成反向SQL:记录数据快照(UNDO_LOG),用于回滚。
- 全局锁:防止其他事务修改同一数据。
- 优点:业务侵入性低,无需手动编写补偿逻辑。
3. 分布式锁
确保分布式环境下资源的互斥访问。
(1)基于Redis的实现
- 核心命令:
SETNX
(或SET key value NX EX
)设置锁,Lua脚本保证原子性解锁。 - 示例:
-- 加锁(设置过期时间)
SET lock_key unique_value NX EX 30
-- 解锁(Lua脚本验证值后删除)
if redis.call("get", KEYS[1]) == ARGV[1] thenreturn redis.call("del", KEYS[1])
elsereturn 0
end
- 问题:锁过期时间需合理,避免业务未完成锁已释放。
(2)基于ZooKeeper的实现
- 临时顺序节点:
- 客户端创建临时顺序节点(如
/lock/node_00000001
)。 - 监听前一个节点,若前序节点释放,则获取锁。
- 客户端创建临时顺序节点(如
- Watcher机制:节点删除时触发通知,避免轮询。
- 优点:锁自动释放(会话断开时节点删除),无死锁风险。
对比与总结
技术 | 优点 | 缺点 |
---|---|---|
2PC | 强一致性 | 协调者单点问题,性能低 |
TCC | 灵活性高 | 需业务侵入,实现复杂 |
Seata AT | 自动化补偿,低侵入 | 依赖全局锁,并发性能受限 |
Redis锁 | 高性能,易扩展 | 锁超时时间难设定 |
ZooKeeper锁 | 高可靠性,无死锁 | 性能低于Redis,依赖ZK集群 |