Zookeeper 概述
ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
分布式应用有两部分, Server(服务器) 和 Client(客户端) 应用程序。服务器应用程序实际上是分布式的,并具有通用接口,以便客户端可以连接到集群中的任何服务器并获得相同的结果。 客户端应用程序是与分布式应用进行交互的工具。
分布式应用的优点
-
可靠性 - 单个或几个系统的故障不会使整个系统出现故障。
-
可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。
-
透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。
什么是Apache ZooKeeper?
Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。
ZooKeeper提供的常见服务如下 :
-
命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
-
配置管理 - 加入节点的最近的和最新的系统配置信息。
-
集群管理 - 实时地在集群和节点状态中加入/离开节点。
-
选举算法 - 选举一个节点作为协调目的的leader。
-
锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
-
高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。
分布式应用程序提供了很多好处,但它们也抛出了一些复杂和难以解决的挑战。ZooKeeper框架提供了一个完整的机制来克服所有的挑战。竞争条件和死锁使用故障安全同步方法进行处理。另一个主要缺点是数据的不一致性,ZooKeeper使用原子性解析。
ZooKeeper的好处
-
简单的分布式协调过程
-
同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理。
-
有序的消息
-
序列化 - 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。
-
可靠性
-
原子性 - 数据转移完全成功或完全失败,但没有事务是部分的。
Design Goals
Conditional updates and watches
监视是一种简单的机制,使客户端收到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watches。Watches会向注册的客户端发送任何znode(客户端注册表)更改的通知。
Znode更改是与znode相关的数据的修改或znode的子项中的更改。只触发一次watches。如果客户端想要再次通知,则必须通过另一个读取操作来完成。当连接会话过期时,客户端将与服务器断开连接,相关的watches也将被删除。
ZooKeeper is replicated
组成ZooKeeper服务的服务器必须相互了解。它们在内存中维护状态映像,以及持久存储中的事务日志和快照。只要大多数服务器可用,zookeeper服务就可用。
客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果到服务器的TCP连接中断,客户端将连接到另一个服务器。
ZooKeeper is ordered
zookeeper用反映所有zookeeper事务顺序的数字标记每个更新。后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语。
ZooKeeper is fast.
它在“阅读主导”工作负载中特别快。ZooKeeper应用程序运行在数千台机器上,当读操作比写操作更常见时,它的性能最佳,比率约为10:1。
Nodes and ephemeral nodes
与标准文件系统不同,zookeeper命名空间中的每个节点都可以有与其关联的数据以及子节点。这就像有一个文件系统,允许一个文件也是一个目录。(zookeeper的设计目的是存储协调数据:状态信息、配置、位置信息等,因此存储在每个节点上的数据通常很小,在字节到千字节的范围内。)我们使用znode一词来说明我们所说的zookeeper数据节点。
znodes维护一个stat结构,其中包括数据更改、acl更改和时间戳的版本号,以允许缓存验证和协调更新。每次znode的数据更改时,版本号都会增加。例如,每当客户机检索数据时,它也会接收数据的版本。
存储在命名空间中每个znode的数据是原子读写的。reads获取与znode关联的所有数据字节,write替换所有数据。每个节点都有一个访问控制列表(acl),该列表限制谁可以做什么。
ZooKeeper数据模型
-
在图中,首先有一个由“/”分隔的znode。在根目录下,你有两个逻辑命名空间 config 和 workers 。
-
config 命名空间用于集中式配置管理,workers 命名空间用于命名。
-
在 config 命名空间下,每个znode最多可存储1MB的数据。这与UNIX文件系统相类似,除了父znode也可以存储数据。这种结构的主要目的是存储同步数据并描述znode的元数据
ZooKeeper数据模型中的每个znode都维护着一个 stat 结构。一个stat仅提供一个znode的元数据。它由版本号,操作控制列表(ACL),时间戳和数据长度组成。
Znode的类型
Znode被分为持久(persistent)节点,顺序(sequential)节点和临时(ephemeral)节点。
官网:http://zookeeper.apache.org/doc/current/zookeeperOver.html