TypechoJoeTheme

顿搜

统计

02. Zookeeper分布式协调服务——大数据专栏

2022-07-18
/
0 评论
/
140 阅读
/
正在检测是否收录...
07/18

Zookeeper是一个分布式应用程序的协调服务,可以提供一组工具,让人们在构建分布式应用时能够对部分失败进行正确处理(部分失败是分布式系统固有的特征,使用Zookeeper并不能避免部分失败)。

Zookeeper定义

Zookeeper是一个分布式的、开源的协调服务框架,服务于分布式应用。

它是Google的Chubby组件的一个开源实现,是Hadoop和HBase的重要组件。

  • 它提供了一系列的原语(数据结构)操作服务,因此分布式应用能够基于这些服务,构建出更高级别的服务,比如分布式锁服务配置管理服务分布式消息队列分布式通知与协调服务等。
  • Zookeeper设计上易于编码,数据模型构建在树形结构目录风格的文件系统中。

Zookeeper的特点

Zookeeper工作在集群中,对集群提供分布式协调服务,它提供的分布式协调服务具有如下的特点。

  • 最终一致性:客户端不论连接到哪个Server,看到的都是同一个视图,这是Zookeeper最重要的特点。
  • 可靠性:Zookeeper具有简单、健壮、良好的性能。如果一条消息被一台服务器接收,那么它将被所有的服务器接收。
  • 实时性:Zookeeper保证客户端将在一个时间间隔范围内,获得服务器更新的信息或服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新的数据,应该在读数据之前调用sync( )接口。
  • 等待无关(wait-free):慢的或失效的客户端不得干预快速客户端的请求,这就使得每个客户端都能有效地等待。
  • 原子性:对Zookeeper的更新操作要么成功,要么失败,没有中间状态。
  • 顺序性:它包括全局有序和偏序两种。

(1) 全局有序是针对服务器端,例如,在一台服务器上,消息A在消息B前发布,那么所有服务器上的消息A都将在消息B前发布。
(2) 偏序是针对客户端,例如,在同一个客户端消息B在消息A后发布,那么执行的顺序必将是先执行消息A然后再执行消息B。所有的更新操作都有严格的偏序关系,更新操作都是串行执行的,这是保证Zookeeper功能正确性的关键。

Zookeeper的基本架构

Zookeeper服务自身组成一个集群(2n+1个服务节点最多允许n个失效)

Zookeeper服务有两种角色:

  • 一种是主节点(Leader),负责投票的发起和决议,更新系统状态;
  • 另一种是从节点(Follower),用于接收客户端请求并向客户端返回结果,在选主过程(即选择主节点的过程)中参与投票。

主节点失效后,会在从节点中重新选举新的主节点。

对于Zookeeper集群来说,只要超过一半数量的Zookeeper服务端可用,Zookeeper整体服务就可用。

Zookeeper的工作原理

Zookeeper的核心是原子广播,即对Zookeeper集群上的所有主机发送数据包,通过这个机制保证了各个服务端之间的数据同步

实现这个机制在Zookeeper中有一个内部协议,此协议有两种模式,一种是恢复模式,一种是广播模式

  • 恢复模式: 当服务启动或在主节点崩溃后,就进入了恢复模式,当主节点再次被选举出来,且大多数服务端完成了和主节点的状态同步后,恢复模式就结束了
  • 广播模式: 一旦主节点已经和多数从节点(也就是服务端)进行了状态同步后,它就可以开始广播消息,即进入广播模式。

在广播模式下,服务端会接受客户端的请求,所有的写请求都被转发给主节点,再由主节点发送广播给从节点。当半数以上的从节点完成数据的写请求之后,主节点才会提交这个更新,然后客户端才会收到一个更新成功的响应。

Zookeeper的数据模型

Zookeeper维护着一个树形层次结构,树中的节点被称为znode

znode可以用于存储数据,并且有一个与之相关联的访问控制列表(Access Control List,ACL,用于控制资源的访问权限)

Zookeeper被设计用来实现协调服务(通常使用小数据文件),而不是用于大容量数据,因此一个znode能存储的数据被限制在1MB以内

数据访问的原子性

客户端在读取一个znode的数据时,要么读到所有数据,要么读操作失败,不会存在只读到部分数据的情况。

同样,写操作将替换znode存储的所有数据,Zookeeper会保证写操作不成功就失败,不会出现部分写成功之类的情况,也就是不会出现只保存客户端所写部分数据的情况。

znode特性

  • 临时节点

znode节点有两种:临时节点和持久节点。znode的类型在创建时即确定,之后不能修改。

当创建临时节点的客户端会话结束时,Zookeeper会将该临时节点删除。临时节点不可以有子节点,即使是短暂的子节点。

而持久节点不依赖客户端会话,只有当客户端明确要删除该持久节点时才会被真正删除。

  • 顺序节点

顺序节点是指名称中包含Zookeeper指定顺序号的znode。

如果在创建znode时设置了顺序标识,那么该znode名称之后就会附加一个值,该值是一个单调递增的计数器添加的,由父节点维护。

在一个分布式系统中,顺序号可用于为所有的事件进行全局排序,这样客户端就可以通过顺序号来推断事件的顺序。

  • 观察机制

znode以某种方式发生变化时,观察(watcher)机制(观察机制:一个watcher事件是一个一次性的触发器,当被设置了watcher的znode发生了改变时,服务器将这个改变发送给设置了watcher的客户端,以便通知它们)可以让客户端得到通知。

朗读
赞 · 0
版权属于:

顿搜

本文链接:

https://dun.so/archives/2876/(转载时请注明本文出处及文章链接)