分布式系统中多个节点同时操作共享资源时,需要分布式锁来防止并发冲突。
1. 分布式锁的核心目标
- 保证同一时刻只有一个节点执行关键操作。
- 支持可重入、超时释放、容错恢复。
2. 实现方式
-
Redis锁
- 基于
SET key value NX PX ttl命令。 - 解锁时校验value防止误删。
- RedLock算法提高可靠性。
- 基于
-
ZooKeeper锁
- 利用临时顺序节点实现锁竞争。
- 会话断开自动释放锁。
- 天然具备可重入特性。
-
数据库锁
- 基于唯一索引或
SELECT ... FOR UPDATE。 - 实现简单,但性能较低。
- 基于唯一索引或
3. 分布式锁的特性
- 唯一性:同一资源同一时刻仅一锁。
- 可重入性:同线程可多次加锁。
- 超时释放:防止死锁。
- 高可用性:锁服务自身应具备冗余。
4. 实践细节
- 业务操作必须在锁有效期内完成。
- 解锁逻辑要幂等。
- 建议加上“看门狗”机制自动续期。
- 使用UUID或线程标识确保锁归属。
5. 案例
库存扣减:Redis分布式锁确保单商品同一时间仅一个进程修改库存,防止超卖。
结论:分布式锁是高并发下的一致性支撑点。正确设计能防止混乱,错误设计则制造隐患。