@toc:
- 分布式锁需要具备哪些特性?
- 如何使用Zookeeper实现分布式锁?
- 比较Redis分布式锁方案;
➤ 分布式锁特性: 互斥性, 超时放锁
➤ 使用Zk实现分布式锁: Zk实现分布式锁利用了Zk的诸多特性: 节点有序性, 临时节点, Watch ..
- 加锁: client 在/lock节点下创建”有序”Znode , 节点id递增由父节点维护, 例如 /lock/node00000 , 如果client的节点是最小的, 则获得锁;
获得锁失败的client, 监听 /lock 节点, 当/lock下面节点结构发生变化, zk会通知/lock下全部的node的Client (此处可以改进性能, node00001 只监听 node00000, node00002只监听 node0001 …); - 解锁: Client删除自己的节点, zk Watch进行通知
- 超时: 似乎只能等临时Znode被删除(Client的回话结束, Znode被删除)