1.Master选举
在分布式系统中,需要选举一台机器作为master或者leader。
这时候,可以选择一个跟节点,比如/master,然后多台机器同时像这个节点创建一个子节点/master/lock,利用zookeeper的特性,最终只有一台机器能否创建成功,成功的那台机器就是Master;
其他机器注册watch到这个子节点,然后当master宕机的时候,其他机器就会重新开始选举。
2.分布式锁
分布式锁的场景通常是多个进程需要在某个节点保证同步,比如保证只有一个进程进到某个函数里面
下面例子中的查询余额和更新余额操作就需要用锁锁住,保证一个线程做完了查询和更新操作之后,才能有另外一个线程来做查询和更新操作
这个使用的锁称为排他锁(Exclusive Locks),又称为写锁或者独占锁。当一个事务1对数据对象1加了排他锁,那么在整个加锁期间,只允许事务1对对象1进行读取或者更新
1 | 一个账户有100元 |
其他的锁还有共享锁(Shared Locks),又称之为读锁。 如果事务1对数据对象1加了共享锁,那个当前事务只能对数据对象1进行读操作,其他事务也只能对这个对象加共享锁,直到所有共享锁都被释放。
3.分布式计数器
比如统计系统的在线人数
4.分布式Barrier
barrier是一种控制多线程之间同步的经典方法
在一个JVM里面,可以使用java的CyclicBarrier,会等待所有线程同步后,再执行其他业务逻辑
参考:Java多线程——其他工具类CyclicBarrier、CountDownLatch和Exchange
在分布式的场景下,可以使用zk来实现
5.hadoop
在Hadoop中,Zookeeper主要用于实现HA,其中HDFS的NameNode和ResourceManager都是基于Zookeeper实现的HA。
6.Hbase
在Hbase中,Zookeeper主要用于分布式状态协调,即regionserver挂掉时,通知到整个hbase系统,以及客户端。
7.Kafka