架构与源码解读
一. ZooKeeper是什么? |
ZooKeeper是分布式应用程序协调服务。 |
二. ZooKeeper提供什么? |
1. 文件系统 2. 通知机制 一、ZooKeeper文件系统 ## 子目录:每个子目录项如NameService都被称为znode,和文件系统一样,可以自由增加、删除节点znode,在节点下可以增减、删除子节点znode,唯一不同时znode可以存储数据。 ## znode:四种类型 客户端与zookeeper断开连接后, #### 1.持久化目录节点 PERSISTENT 节点依旧存在 #### 2.持久化顺序编号目录节点 PERSISTENT_SEQUENTIAL 节点依旧存在,ZooKeeper给该节点名称进行编号 #### 3.临时目录节点 EPHEMERAL 节点删除, #### 4.临时顺序编号目录节点 EPHEMERAL_SEQUENTIAL 节点删除,ZooKeeper 二、ZooKeeper通知机制 客户端注册监听所关心的目录节点,当目录节点发生变化(数据改变、删除,子目录节点增加、删除)时,ZooKeeper通知客户端。 |
三. ZooKeeper做了什么? |
## 1.命名服务 文件系统里创建一个目录,有唯一的path。 ## 在使用tborg无法确定上游程序的部署机器时,即可与下游程序约定好path, 通过path即能互相探索发现。 ## 2.配置管理 配置信息保存在ZooKeeper目录节点,相关应用程序监听此目录节点。 ## 当配置信息发生变化,每个应用程序就收到ZooKeep的通知,然后从ZooKeeper获取新配置信息,应用到系统 ## 3.集群管理 1>监听:机器退出和加入 2>选举:master ## 1> 监听问题:所有机器约定在父目录GroupMemebers创建临时目录节点,然后监听父目录节点的子节点变化消息。 ###退出\宕机:与zookeeper断开连接,临时目录节点删除,其他机器收到通知 ### 加入: 与zookeeper建立连接,临时目录节点加入兄弟节点 ## 2> 选举问题:所以机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master ## 4.分布式锁 1>保持独占 2>控制时序 ## 1> 保持独占: znode看作锁,通过createznode方式实现。所有客户端创建/distribute_lock 节点,最终成功创建的客户端 也拥有了这把锁。用完删除掉自己创建的distribute_lock 节点,就释放出锁。 ## 2> 控制时序:/distribute_lock预先存在,所有客户端在它下面创建顺序编号目录节点,和选master一样,编号最小的获得锁, 用完删除,依次方便 ## 5.队列管理 1>同步队列 (成员全部聚齐,才可用;否则,一致等待所有成员到达。) 2>FIFO队列 (按照FIFO入队出队) ## 同步队列 预定目录下创建临时目录节点,监听节点数目是否符合数量要求 ## FIFO队列 入列有编号,出列按编号。 (和分布式锁服务中的控制时序场景基本原理一致) ## 6.分布式与数据复制 #ZooKeeper为集群提供一致的数据服务,在所有机器做数据复制 ##1>容错,节点出错,系统不停止,其他节点接管 ##2>扩展:负载分布到多个节点,或者增加节点,来提高系统的负载 ##3>性能:客户端本地访问就近节点,提高访问速度。 #数据复制集群系统,(客户端读写访问) ##1>写主 :数据修改提交给指定节点。读无此限制,可以读取任何一个节点。此情况下,客户端需要对读与写进行区别(即读写分离) ##2>写任意:数据修改提交给任意节点。读一样,客户端对集群节点的角色与变化透明。 #对zookeeper,采用写任意。通过增加机器,读吞吐能力和响应能力扩展性好,而写,随着机器的增多吞吐能力下降(这是它建立observer的原因),而响应能力取决于具体实现方式(延迟赋值保持最终一致性,or,立即赋值快速响应。) |
四、角色与描述 |
领导者Leader :发起和决议投票,更新系统状态 学习者Learner: ##跟随者Follower :接收客户端请求,选举中参与投票,向客户端返回结果 ##观察者Observer:接收客户端连接,将写请求转发给Leader节点,不参加投票,只同步Leader状态 Observer目的:扩展系统,提高读取速度。 客户端Client :请求发起方 |