什么是zookeeper?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。本文简单分析zookeeper的工作原理,对于如何使用zookeeper不是本文讨论的重点。
Zookeeper的基本概念?
1. 角色:Zookeeper中的角色主要有以下三类,如下表所示:
系统模型如图所示:
2. 设计目的:
2.1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
2.2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
2.3 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
2.4 .等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
2.5. 原子性:更新只能成功或者失败,没有中间状态。
2.6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
Zookeeper的数据结构:
1. 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识。
2. znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录。
3. znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据。
4. znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
5. znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
6. znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的。
Zookeeper的工作原理?
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。
Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch(纪元),标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
选举流程:
当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。先介绍basic paxos流程:
1 .选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server;
2 .选举线程首先向所有Server发起一次询问(包括自己);
3 .选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中;
4. 收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server;
5. 线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数, 设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。
通过流程分析我们可以得出:要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1.
同步流程:
选完leader以后,zk就进入状态同步过程。
1. leader等待server连接;
2 .Follower连接leader,将最大的zxid发送给leader;
3 .Leader根据follower的zxid确定同步点;
4 .完成同步后通知follower 已经成为uptodate状态;
5 .Follower收到uptodate消息后,又可以重新接受client的请求进行服务了。
流程图如下所示:
工作流程:
Leader工作流程:
Leader主要有三个功能:
1 .恢复数据;
2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型;
3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。
Follower工作流程:
Follower主要有四个功能:
1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
2 .接收Leader消息并进行处理;
3 .接收Client的请求,如果为写请求,发送给Leader进行投票;
4 .返回Client结果。
Follower的消息循环处理如下几种来自Leader的消息:
1 .PING消息: 心跳消息;
2 .PROPOSAL消息:Leader发起的提案,要求Follower投票;
3 .COMMIT消息:服务器端最新一次提案的信息;
4 .UPTODATE消息:表明同步完成;
5 .REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
6 .SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。
Follower的工作流程简图如下所示,在实际实现中,Follower是通过5个线程来实现功能的。
对于observer的流程不再叙述,observer流程和Follower的唯一不同的地方就是observer不会参加leader发起的投票。
相关推荐
1. Zookeeper的基本概念 - Zookeeper是一个分布式服务框架,主要解决分布式环境中的数据一致性问题。 - 数据模型:Zookeeper的数据结构类似于文件系统,由路径、节点(znode)组成,分为临时节点和永久节点。 - ...
在这个系列的第一部分,我们将重点关注Zookeeper——一个广泛使用的分布式协调服务。Zookeeper由Apache软件基金会开发,旨在解决分布式环境中的数据管理、服务发现、配置管理等问题。 Zookeeper的核心概念包括节点...
深入理解Zookeeper,除了基本概念,还需要掌握其内部机制,如Watch机制、会话管理、ZNode类型、数据模型等。此外,了解Zookeeper在大型分布式系统中的应用和最佳实践也是必不可少的。 通过上述的讲解,我们可以看到...
《从Paxos到Zookeeper:分布式一致性原理与实践》这本书深入浅出地探讨了分布式系统中的一个重要概念——一致性,以及如何在实际操作中通过Paxos算法和Zookeeper实现这一概念。分布式一致性是分布式系统设计的核心,...
《ZooKeeper——分布式过程协同技术详解》是一本深度探讨...通过阅读这本书,读者不仅能学习到ZooKeeper的基本原理和操作,还能深入理解分布式环境下的协同问题及其解决方案,从而在实践中更好地应用和优化分布式系统。
总的来说,《ZooKeeper——分布式过程协同技术详解》是一本全面、实用的ZooKeeper学习资料,无论你是初学者还是资深开发者,都能从中获益匪浅。通过阅读本书,你可以深入了解分布式协调服务的重要性,掌握ZooKeeper...
1. `dubbo 入门及安装总结.docx`:这个文档可能包含了Dubbo的基本概念、安装步骤、配置详解以及常见问题解答,是你快速了解和上手Dubbo的重要参考资料。 2. `服务端和消费端demo.rar`:这是一个包含服务端和消费端...
总的来说,这个"zookeeper的分布式全局锁纯代码解决方案"是一个很好的学习和实践分布式锁的起点,它帮助我们理解Zookeeper在分布式系统中的作用,以及如何利用它来解决并发访问的问题。在深入研究和理解这些代码后,...
ZooKeeper基于PAXOS算法的简化版本——ZAB(ZooKeeper Atomic Broadcast)协议,实现了高可用性和一致性。ZAB协议保证了在领导者选举、数据同步等操作中的原子广播,确保所有副本节点状态的一致性。 在ZooKeeper中...
现在,我们就来深入探讨一下Zookeeper的基本概念以及如何在SpringCloud中进行集成。 首先,我们需要理解Zookeeper的核心功能。Zookeeper提供了一种树状的命名空间,每个节点都可以存储数据并支持多种操作,如读、写...
1. **基础知识**:熟悉ZooKeeper的基本概念、特点及其提供的服务。 2. **核心组件**:深入理解文件系统、watcher机制等核心组件的工作原理。 3. **应用场景**:掌握ZooKeeper在实际项目中的典型应用场景,如分布式锁...
书中的核心内容围绕分布式系统中的一个重要概念——一致性,特别是通过Paxos算法和Zookeeper的实践应用来阐述这一主题。 分布式一致性是指在分布式环境中,数据在多个节点间保持一致的状态,它是构建高可用、高可靠...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》这本书深入探讨了分布式系统中的核心问题——一致性。一致性是确保在分布式环境中的多个节点间数据一致性的关键,它是构建可靠、可扩展服务的基础。本篇文章将围绕...
本文将基于私塾在线《Hadoop实战——初级部分》的学习笔记,深入探讨Hadoop的基本概念、核心组件以及在实际中的应用。 #### 二、为何选择学习Hadoop 1. **市场需求**:当前社会产生了大量的数据,例如每分钟...
在深入探讨其源码之前,我们先来了解一下Zookeeper和消息队列的基本概念。 **1. Apache ZooKeeper** Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点...
包括Hadoop、Hive、Spark、Storm、Flink、HBase、Kafka、Zookeeper、Flume、Sqoop等技术的学习 Hadoop 分布式文件存储系统 —— HDFS 分布式计算框架 —— MapReduce 集群资源管理器 —— YARN Hadoop 单机伪集群...
对于初学者来说,构建一个有效的学习路径至关重要。以下是一份2021年更新的Java后端学习路线,旨在帮助入门者逐步深入Java世界。 首先,基础阶段是学习任何编程语言的关键。在Java的世界里,你需要掌握基础语法、...
- **输入输出流**:掌握I/O流的基本概念,了解文件操作和网络通信。 2. **集合框架** - **List, Set, Queue, Map**:熟悉各种集合类的使用,如ArrayList, HashSet, LinkedList, HashMap等,理解它们的特点和适用...
大数据学习路线 大数据技术栈思维导图 大数据常用软件安装指南 一、Hadoop 分散文件存储系统 —— HDFS 多元计算框架——MapReduce 集群资源管理器 —— YARN Hadoop单机伪集群环境搭建 Hadoop 云服务环境搭建 HDFS...