Zookeeper 分布式锁原理
Zookeeper节点类型 持久节点:PERSISTENT: 创建后,一直存着,直至手动删除。 临时节点:EPHEMERAL 临时节点的生命周期和客户端会话绑定。 临时节点不能创建子节点 特殊属性:SEQUENTIAL属性。 节点被创建的时候,Zookeeper自动在节点名后的追加整数数字,由父节点维护的自增节点 因此有可以划分出两类: 持久顺序节点:PERSISTENT_SEQUENTIAL 临时顺序节点:EPHEMERAL_SEQUENTIAL zookeeper分布式锁的原理 锁分:排它锁(X 锁),共享锁(S 锁); 示例:/exclusive_lock/lock 该节点被定义为锁 排它锁(X 锁)的核心:保证当前有且只有一个事务获得锁,并且锁被释放后,所有正在等待锁的事务能被通知到。 X锁获取过程:所有客户端通过create()创建锁,在该锁位置下创建临时节点/exclusive_lock/lock。但有且只有一个能够创建成功。该客户端获得锁,其他客户端到该节点上注册节点变更Watcher监听。 X锁释放过程:由于是临时节点,通过2种方式释放锁 当前获取锁的客户端会话失效,Zookeeper删除该临时节点 正常执行完业务逻辑,客户端主动删除该临时节点 当锁释放后,通知所有注册Watcher的客户端,重新开始竞争锁 注:红色字体已避免"羊群效应" 共享锁 (S 锁)的核心