1 Zookeeper介绍
Zookeeper是一个分布式的协调服务,为分布式应用程序提供synchronization、configuration maintenance、groups和nameing服务。
Zookeeper是一个有众多服务器节点组成的集群,这些节点中有一个主节点(leader),leader是通过leader selection自动地从服务器节点中选举出来。Zookeeper提供了一个类似于标准文件系统目录结构的hierarchal namespace(层次化的命名空间)。如下图所示,hierarchal namespace中的每一个节点都被称为 znode。Znode是组成hierarchal namespace的基本单位。在源码中对应于类DataNode,其维护着节点用户数据、父节点和子节点集合,以及本节点状态。用户可以在 hierarchal namespace中创建znode,将数据保存在znode中,并监听znode的状态变化,Zookeeper会保证client对znode的操作 是顺序一致性。
2 Zookeeper实现分析
Zookeeper服务器节点的实现可以分成两部分:一部分是处理与客户端交互,实现客户端对zookeeper的hierachal namespace的各种操作。另一部分是作为zab算法(paxos算法的zookeeper实现)的参与者(leader、follower、 observer三种角色的其中一种),实现具体的算法逻辑。
在这篇博客里,我们只讨论zookeeper服务器如何实现第一个部分功能。
Zookeeper服务器的hierachal namespace、znode、客户端与服务器连接、以及客户端可以监听服务器的znode状态的watch机制之间的元数据关系如下图所示:
Zookeeper使用Trie树 来实现了hierachal namespace,由PathTrie这个类来完成。为了实现从路径到znode的映射,zookeeper在内存中维护了一个znode的 hashmap,key为znode在hierachal namespace上的路径,value为znode对象,znode在zookeeper源码中由DataNode这个类实现。为了实现client监 听znode的状态变化,zookeeper将与客户端的连接和hierachal namespace的节点路径进行映射,WatchManager这个类就是用于维护这个映射关系的,其中NIOServerCnxn是 zookeeper服务器与client的一个socket连接;为了监听Znode的目录结构的变化和数据变化,zookeeper使用了两个 WatchManager,分别用来监听namespace的目录结构和数据的变化。
所有以上这些关系都封装在DateTree这个类中,DateTree的类图如下所示。
在paxos算法中有三种角色,分别是提案者,接受者和学习者。在zookeeper中有三种类型的节点,分别是leader、follower和 observer三种类型的节点,分别与paxos的三种角色相对应;需要注意的是zookeeper中还有一个learner的概念,这个 learner是paxos中的学习者,leader、follower和observer都是learner(即都是学习者,可以学习提案),但 observer节点除了是learner之外没有其他功能,也就是说observer只能学习已经批准的提案,而不会参与到提案的投票过程中。 observer这个角色的设定是为了保证提案选举的性能不会随着zookeeper集群规模扩大而降低(参与投票的节点越多,每一次投票花费的事件就越 多)。
在zookeeper中用LeaderZooKeeperServer,FollowerZooKeeperServer和
ObserverZooKeeperServer这三个类来实现三种类型的服务器节点。类图如下所示,为了简单起见没有详细给出成员变量和成员函数。
由于Zookeeper的服务器节点有多种类型,不同类型的服务器节点对client发过来的信令都有不同的处理流程,为了实现最大程度上的代码复 用,zookeeper采用了责任链的设计模式来实现各种类型的zookeeper节点。所以在每一个ZookeeperServer上都会维护一个 RequestProcessor责任链,来处理各个节点上的逻辑。
2.1 leaderZookeeperServer
Leader要完成以下几个事情:
1、接收客户端的request请求
2、将会修改同步数据的request请求 转化为proposal,并保存.
3、向所有的follower发送proposal。
4、接收follower的ack。
5、统计收到的ack,如果某一个proposal的ack超过了半数,那么向所有follower发送commit 信令,并向所有observer发送inform信令,执行这个proposal的动作。
6、leader自己执行已经被commit的proposal所对应的操作,并回复结果。
LeaderZookeeperServer的责任链如下面两图所示:
2.2 FollowerZooKeeperServer
Follower:主要负责批准或否决leader提出的proposal。Follower的主要逻辑处理如下:
1、 发现leader。
2、 建立与leader的连接。
3、 向leader注册。(leader activation)
4、 与leader进行同步。
5、 无限循环
---读取从leader处接收到的信令。
---处理从leader处接收到的信令。
A、 如果是PROPOSAL信令(写请求),将此信令投递到FollowerZooKeeperServer的synProcessor。主要作用是回复leader一个ack。
B、 如果是COMMIT信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。最终执行FollowerZooKeeperServer的commit函数。
C、 如果是SYNC信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。commitProcessor直接将此信令转发给FinalRequestProcessor,将sync信令带的内容写入持久层。
FollowZookeeperServer的责任链如下所示:
2.3 ObserverZooKeeperServer
observer:学习已经被commit的proposal的结果,然后执行相应的操作。Observer主要处理逻辑:
1、 发现leader。
2、 连接到leader上,建立TCP连接。
3、 与leader进行同步,同步leader上已经被commit的proposal。
4、 无限循环,读取接收到得信令,处理信令。
1、如果是syn信令,调用ObserverZooKeeperServer的syn函数,投递到commitProcessor中。
2、如果是info信令,同样调用ObserverZooKeeperServer的commit函数,投递到commitProcessor中。
OserverZookeeperServer的责任链基本上与follower的相同如下,只是commitProcessor调用的commit函数里的处理不同:
2.4 Zookeeper各节点交互
Zookeeper各个角色的信令交互图:
最后画了一张各个zookeeper server的信令交互图
相关推荐
《Zookeeper:分布式服务治理的核心组件》 Zookeeper,作为Apache的一个开源项目,是分布式应用程序协调服务的基石,它是一个高可用、高性能的分布式一致性服务。在标题“zookeeper-3.4.6_zookeeper_”中,我们可以...
apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...
《ZooKeeper:分布式过程协同技术详解》与《从Paxos到Zookeeper:分布式一致性原理与实践》这两本书深入探讨了分布式系统中的关键组件ZooKeeper及其背后的一致性算法Paxos。ZooKeeper是由Apache软件基金会开发的一个...
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...
ZooKeeper 3.6.3 是一个广泛用于分布式系统的协调服务,它为分布式应用程序提供了高效且可靠的命名服务、配置管理、集群同步、分布式锁等核心功能。在深入理解源码之前,我们需要先了解ZooKeeper的基本概念和工作...
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用程序的运行状态,提供诸如命名服务、配置管理、分布式同步、组服务等分布式基础服务。Zookeeper的设计目标...
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
CentOS 8 安装 ZooKeeper 3.8.0 详细步骤 ZooKeeper 是一个分布式应用程序协调服务,提供了配置管理、名称服务、分布式同步和提供组服务等功能。下面是 CentOS 8 安装 ZooKeeper 3.8.0 的详细步骤。 1. 下载安装包...
在IT领域,Zookeeper是一个非常重要的分布式协调服务,由Apache Hadoop项目开发并维护。它在大规模分布式系统中被广泛用于数据管理、配置共享、命名服务、群组服务以及分布式同步。Zookeeper-3.4.8是其一个稳定版本...
**Zookeeper可视化工具详解** Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供高度可靠的命名服务、配置管理、集群同步、领导选举等核心功能。在运维和开发过程中,为了更方便地管理和监控...
Zookeeper是Apache软件基金会的一个开源项目,主要用于分布式协调服务,它是集群管理的基石,被广泛应用于大数据、云计算等领域。Zookeeper 3.4.12是该系统的一个稳定版本,提供了解压即用的便利性。 一、Zookeeper...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个高度可用、高性能的框架,用于管理数据和配置信息,处理命名服务、分布式同步以及组服务等问题。ZooKeeper 的设计目标是简化分布式环境中的...
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用程序,提供了诸如配置维护、命名服务、分布式同步、组服务等这些分布式基础服务。Zookeeper是Apache Hadoop...
### Zookeeper 集群升级方案详解 #### 一、需求背景 随着业务的发展和技术的进步,现有的Zookeeper集群系统版本过低(当前版本为3.3.4),导致某些功能特性无法得到支持或表现不佳,这直接影响到了业务的正常运行...
Apache ZooKeeper 是一个高度可靠的分布式协调系统,广泛应用于云原生环境中的服务发现、配置管理、命名服务等场景。Zookeeper-3.8.0 是该系统的最新版本,提供了更稳定和高效的服务。 Zookeeper 的核心概念包括...
《Zookeeper连接工具ZkTools详解》 Zookeeper作为一个分布式协调服务,在云原生环境中扮演着至关重要的角色。它提供了一种可靠的方式来管理和维护配置信息、命名服务、集群同步、分布式锁等。为了方便开发者与...
Zookeeper是Apache Hadoop项目下的一个分布式协调服务,它提供了一种在大型分布式系统中维护配置信息、命名服务、分布式同步、组服务等机制。Zookeeper-3.4.12是该服务的一个稳定版本,它包含了对之前版本的改进和...
《Zookeeper 3.4.14 IP限制功能详解及源码改造》 Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。...
《ZooKeeper 3.4.9:在Windows与Linux上的部署与应用》 ZooKeeper,一个由Apache基金会开发的分布式协调服务,是许多大型分布式系统中的关键组件。3.4.9版本是ZooKeeper的一个稳定版本,提供了一系列增强功能和性能...