1、ZooKeeper和Redis一样,也是C/S结构(分成客户端和服务端),
它是一个数据库,文件存储系统,并且有监听通知机制(观察者模式)。
2、znode分为两种类型:
1、短暂/临时(Ephemeral):当客户端和服务端断开连接后,所创建的Znode(节点)会自动删除
2、持久(Persistent):当客户端和服务端断开连接后,所创建的Znode(节点)不会删除
3、zookeeper许多功能的实现就是:监听+znode去实现的。
zookeeper中的分布式锁的实现:
访问的时候会创建带顺序号的临时/短暂(EPHEMERAL_SEQUENTIAL)节点,比如,系统A创建了id_000000节点,系统B创建了id_000002节点,系统C创建了id_000001节点。(创建出临时带顺序号的节点)
接着,拿到/locks节点下的所有子节点(id_000000,id_000001,id_000002),判断自己创建的是不是最小的那个节点
• 如果是,则拿到锁。
○ 释放锁:执行完操作后,把创建的节点给删掉
• 如果不是,则监听比自己要小1的节点变化
zookeeper还可以去管理集群的状态:
除了能够感知节点的上下线变化,ZooKeeper还可以实现动态选举Master的功能。(如果集群是主从架构模式下)
原理也很简单,如果想要实现动态选举Master的功能,Znode节点的类型是带顺序号的临时节点(EPHEMERAL_SEQUENTIAL)就好了。
• Zookeeper会每次选举最小编号的作为Master,如果Master挂了,自然对应的Znode节点就会删除。然后让新的最小编号作为Master,这样就可以实现动态选举的功能了。
zookeeper的实现:统一配置管理、统一命名服务、分布式锁以及集群管理。
zookeeper的使用场景:服务注册与订阅、分布式通知、服务命名、数据订阅以及发布、分布式锁(临时节点)。
Create -e(临时节点) -s(创建顺序节点) /test laogong // 创建永久节点
临时顺序节点可以去解决羊群效应。
Zab(Zookeeper Atomic Broadcast)是为ZooKeeper设计的崩溃恢复原子广播协议,它保证zookeeper集群数据的一致性和命令的全局有序性。