加载中...
在多个进程或机器之间协调对共享资源互斥访问的机制。与单进程的互斥锁不同,需要借助外部存储(Redis、Zookeeper、etcd)在多节点间共享锁状态,并处理持有者崩溃后的锁释放问题。

| 类型 | 分布式协调 / 并发控制 |
| 常用实现 | Redis SET NX, Redlock, ZooKeeper ZNode, etcd Lease |
| 关键问题 | 锁泄漏、误删、时钟漂移、进程暂停 |
Redis 分布式锁最简单形式:SET key value NX PX 30000,NX 保证只有一个客户端能成功写入,PX 设置过期时间防止锁泄漏。释放时必须用 Lua 脚本原子地检查并删除,防止误删别人的锁。2016 年 Martin Kleppmann 和 Redis 作者 Salvatore Sanfilippo 围绕 Redlock 展开著名学术辩论:Kleppmann 指出时钟漂移和 GC Stop-The-World 场景下有安全性漏洞,深刻揭示了任何基于超时的锁都无法在进程任意暂停时保证安全。[1]
ZooKeeper 通过创建临时有序节点(Ephemeral Sequential ZNode)实现分布式锁:序号最小的持有锁,会话断开时临时节点自动删除,天然解决锁泄漏。etcd 使用 Lease(租约)机制通过心跳续期,是 Kubernetes 控制面选主的底层机制。对锁安全性要求极高的场景(金融对账、库存扣减),Zookeeper 或 etcd 比 Redis 更可靠,代价是运维复杂度更高。

| 类型 | 分布式协调 / 并发控制 |
| 常用实现 | Redis SET NX, Redlock, ZooKeeper ZNode, etcd Lease |
| 关键问题 | 锁泄漏、误删、时钟漂移、进程暂停 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧