tonglin0325的个人主页

Zk学习笔记——应用场景

1.Master选举

在分布式系统中,需要选举一台机器作为master或者leader。

这时候,可以选择一个跟节点,比如/master,然后多台机器同时像这个节点创建一个子节点/master/lock,利用zookeeper的特性,最终只有一台机器能否创建成功,成功的那台机器就是Master;

其他机器注册watch到这个子节点,然后当master宕机的时候,其他机器就会重新开始选举。

 

2.分布式锁

分布式锁的场景通常是多个进程需要在某个节点保证同步,比如保证只有一个进程进到某个函数里面

下面例子中的查询余额更新余额操作就需要用锁锁住,保证一个线程做完了查询和更新操作之后,才能有另外一个线程来做查询和更新操作

这个使用的锁称为排他锁(Exclusive Locks),又称为写锁或者独占锁。当一个事务1对数据对象1加了排他锁,那么在整个加锁期间,只允许事务1对对象1进行读取或者更新

1
2
3
4
5
6
一个账户有100元
进程A,查询账户余额,等于100元
进程B,查询账户余额,等于100元
进程B,取出100元,并更新,100-100=0
进程A,存入100元,并更新,100+100=200(此时发生错误)

其他的锁还有共享锁(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