一、发布/订阅
配置文件的集中管理。
问题:当分布式系统变多后,每个系统保存相应的配置文件,会造成同个文件有多份,修改起来非常麻烦。
解决方法:使用zk的发布/订阅功能,配合Watcher机制,在应用启动的时候,从注册中心获取配置文件,并监听配置文件的改动。当配置文件修改时,相应的系统接收到watcher的通知,进行相应处理。
二、命名服务
分布式系统中,被命名的实体通常是集群中的机器、提供的服务地址或远程对象等。
如:分布式服务框架(RPC)中的服务地址列表,通过使用命名服务,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供者的信息等。
三、集群管理
1、Watcher 机制
2、ZooKeeper 的节点
通过以上两点,就可以根据节点的变化情况,对集群进行监控和控制。
四、Master 选举
五、分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的方式。
1、排他锁(写锁、独占锁)
用zk的节点来表示锁,获取锁的时候,就调用create() 方法在节点内创建子节点,由于zk保证只有一个客户端能够创建成果,因此保证了锁的唯一。没有或得锁的客户端,在节点内注册子节点变更的Watcher事件,等节点有变化时再尝试获取锁,以此循环获取锁的过程。
释放锁的时候,客户端宕机或者锁拥有者释放锁。
2、共享锁(读锁)
锁类型的判断:
1)、获取节点下所子节点。
2)、如果没有比自己序号小的节点,或者比自己序号小的节点都是读请求,那么可以获取读锁。
3)、如果比自己序号小的节点中有写请求,那么等待锁。
4)、如果写请求对比所有的序号,发现自己不是最小的,那么重复排它锁的获取方式。
注意:序号决定锁的归属。
六、分布式队列
1、FIFO
2、Barrier 分布式屏障,等待某个状态,状态到达时,再执行往下步骤。
总结:
ZooKeeper 节点
Watcher 机制
这两个特性,创造了ZooKeeper 的无线可能。