zookeeper典型应用之分布式锁

1.概念描述

1.分布式锁:这个主要得益于zookeeper保证了数据的强一致性;
2.锁服务分为两:一个是保持独占,另外一个是控制时序;

2.保持独占

1.保持独占,就是所有视图来获取这个锁的客户端,最终只有一个可以成功获得这把锁;
2.通常的做法是把zk上的一个znode看做事一把锁,通过create znode的方式来实现,所有客户端都去创建
   /distribute_lock节点,最终成功创建的那个客户端也即拥有了这把锁;

2.1.样例

A.B.C 三台服务器争先去操作下面的文件(有可能是修改有可能是删除,有可能是查询等操作)

在这里插入图片描述

1.要求所有的应用首先先去zk上指定的目录创建节点/aaaa
  节点要求:临时节点,非序列化
2.谁创建成功谁就获得访问数据文件的权限
3.操作完成,断开跟zk的连接

备注:其他的应用如果需要操作这个文件的话,就去监听这个目录是否存在;  

3.控制时序

1.控制时序:就是所有试图来获取这个锁的客户端,最终都是会被安排执行,只是有个全局时序了,做法和上面基本类似,
  只是这里的/distribute_lock已经预先存在,客户端在它下面创建临时有序节点(这个通过节点的
属性控制:CreateMode.EPHEMERAL_SEQUENTIAL来指定).
2.Zk的父节点(/distribute_lock)维持一份sequence,保证子节点创建的时序性,从而也形成了每个客户端的全局时序;

在这里插入图片描述

ABC 三个服务器应用都去zk中创建有时序的节点,然后根据创建的大小,顺序的去访问上面的文件
如上面从aa0000000 aa000001 aa000002顺序去访问文件

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/85544323