一、ZK的顺序节点特性
使用ZK顺序节点,比如在lock目录下创建3个节点,ZK集群会按照发起创建的顺序来创建节点,最后一位是依次递增的,节点名称由ZK来完成。
二、临时节点特性
ZK中海油一种名为临时节点的节点,临时节点由某个客户端创建,当客户端与ZK集群断开连接,则该节点自动被删除。EPHEMERAL_SEQUENTIAL为临时顺序节点。
根据ZK中节点是否存在,可以作为分布式锁的锁状态,以此来实现分布式锁:
1、客户端1调用create()方法创建临时顺序节点。
2、客户端1调用getCHildren(id)方法来获取所有已经创建的子节点
3、客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,就是看自己创建的序列化是否排第一,如果是,那么就认为这个客户端1获取到了锁,在它前面没有别的客户端拿到锁。
4、如果创建的节点不是所有节点中最小的,那么则监视比自己创建节点的序列化小的最大的节点,进入等待,直到下次监视的子节点变更的时候,再进行子节点的获取,判断是否获取锁。