这里是补充下之前ZooKeeper简单入门文章中, 没有说的, 还有一些补充的使用场景
应用场景
1. 选举Master结点
ZooKeeper的强一致性, 可以保证在高并发的情况下结点创建的全局唯一性
利用这个特性可以让多个客户端创建一个指定的结点, 创建成功的结点就是master结点, 其他结点发现已经存在指定的结点的情况下自动作为从机加入集群
每个机器都可以订阅master创建的临时结点, 当master挂掉的时候临时结点就会消失, 此时所有的从机可以通过相同的方式再次选举出Master
2. 分布式锁实现 (补充)
互斥锁实现
zk 是强一致性的, 可以在高并发的情况下保证结点创建的全局唯一性, 可以让zk通过创建指定结点来实现互斥锁的上锁, 又可以通过监听机制来让客户端及时知道锁释放的时机, 同时可以使用临时结点来保证锁释放的问题, 当客户端挂了之后结点自然也挂掉了, 分布式锁会自动释放
读写锁 ( 共享锁 ) 实现
一样维护一个结点, 不过读取操作需要遍历前面的操作有无写操作, 如果有写操作就不能进行读取, 需要订阅等待写锁释放
写就判断前面是否有结点, 有就不能获取写锁, 需要等待前面的读或写锁释放
3. 唯一ID生成
可以使用ZK代替UUID生成全局唯一ID, 同时可以保证全局ID的有序性