[1] zookeeper基础知识

打印 上一主题 下一主题

主题 902|帖子 902|积分 2706

Zookeeper

Zookeeper是一个分布式协调服务,实现同步服务,配置维护和定名服务等分布式应用。它公开了一组简朴的原语,分布式应用步伐可以基于这些原语实现更高级别同步、配置维护、组和定名服务。利用类似于目录树状结构的数据模子。
zookeeper = 文件体系+监听通知机制。
1. 设计目标



  • 简朴数据模子:Zookeeper允许分布式进程通过共享的分层定名空间相互协调,该定名空间的组织方式类似于尺度文件体系。分层定名空间就是znodes,Zookeeper的数据生存在内存中,以此进步服务器吞吐、减少延迟的目标。
  • 可以构建集群:Zookeeper可被复制,构成zookeeper服务的服务器必须相互了解。它们维护在内存中状态,以及持久存储事务日志和快照,每台机器之间都相互保持着通信。只要大多数服务器可用,zookeeper服务就可用。
    客户端和服务器通过tcp毗连。
  • zookeeper是有序的:zookeeper接纳反映全部事务的顺序的id(全局唯一递增)标志每个更新。
  • zookeeper速度很快:它在读取为主的工作负载中尤其的快。zookeeper在读写比率10:1的情况下体现最佳。
2. CAP理论

分布式体系,分区容错性是一个必须考虑的关键点。一旦分布式体系丧失分区容错性,也就代表放弃了拓展性。大部门分布式体系都会包管在分区容错性的前提下在一致性和可用性做权衡。
   Zookeeper是一个CP(一致性+分区容错性)的,它的职责是包管数据在其管辖下的全部服务之间保持同步、一致。
ZooKeeper的焦点实现算法Zab,就是办理了分布式体系下数据怎样在多个服务之间保持同步问题的。
  重要特点:


  • 顺序一致性:来自客户端的更新将按照它们发送的顺序应用。
  • 可靠性:应用更新后,它将从能够当时起持续存在,直到客户端覆盖更新。
  • 及时性:Zookeeper包管客户端将在一个时间间隔范围内获得服务器更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能包管两个客户端能同时得到刚更新的数据,假如必要更新最新的数据,应该在读数据之前调用sync接口。(调用sync接口可以包管从机和主机举行同步,读取最新的消息)。
  • 原子性:更新只能成功或者失败,没有中间状态。
  • 单一体系映像:客户端将看到类似的服务视图,而不管它毗连到的服务器怎样。即使客户端故障转移到其他类似会话差别服务器,客户端也永远不会看到体系的旧视图。
3. Zookeeper节点特性及节点属性分析

Zookeeper提供类似于文件体系的目录节点树方式的数据存储。它的作用重要是用来维护和监控存储数据的状态变化。通过监听这些数据状态的变化,从而可以达到基于数据的集群管理。
Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元。每个节点可以存储数据,同时可以挂载子节点。
Zookeeper创建节点时可以指定范例。
ZNode节点范例:


  • PERSISTENT:持久化ZNode节点,一旦创建这个ZNode点存储的数据不会主动消失,除非客户端主动删除。
  • EPHEMERAL:临时ZNode节点,Client毗连到Zookeeper Service的时间创建一个Session,之后利用这个毗连实例创建该范例的znode,一旦Client关闭Zookeeper毗连服务器就会清除这个Session,然后Session创建的ZNode的节点就会从定名空间去除。
  • PERSISTENT_SEQUENTIAL:顺序主动编号的ZNode节点,这种znode节点会根据当前已经存在的ZNode节点编号主动加一,而且不会随着Session断开而消失。
  • EPHEMERAL_SEQUENTIAL:临时主动编号节点,ZNode节点编号会主动增长,但是 会随着Session消失。
   Zookeeper的每个节点存储的数据必要原子性的操作,也就是读操作将获取与节点相关的全部数据,写操作也将替换掉节点的全部数据。
znode维护一个统计结构,其中包罗数据变更的版本号、acl变更和时间戳,以允许缓存验证和协调更新。每次znode的数据更改,版本号都会增长。当客户端检索数据时也会收到数据的版本号。
  4. Watcher数据变更通知

客户端可以在znode上设置监视,当znode发生变化时,watch将被触发并移除。当watch被触发时,客户端会收到一个数据包,阐明znode已更改。
3.6.0中:客户端可以在znode上设置永世的递归监视,这些监视在触发时不会被删除,而且以递归方式触发已注册znode以及任何子znode上的更改。
Zookeeper利用Watcher机制实现分布式数据的发布/订阅功能。

Watcher机制:
Watcher机制重要包罗客户端线程,客户端WatcherManager、Zookeeper服务器。客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager中。当Zookeeper服务器出发Watcher事件后,会向客户端发送一个通知(有且仅有一个),客户端线程从WatcherManager中取出对应的Watcher对象执行回调逻辑。
详细交互过程:


  • 客户端调用getData、getChildren等方法时,watch参数设置为true。服务器接到请求,返回节点数据,而且在对应的哈希表中插入被watch的Znode路径。
  • 当被watch的Znode已删除,服务端会查找hash表,找出该Znode对应的全部Watcher,异步通知客户端,然后删除哈希表中对应的key-value(一次性)。
监听事件:


  • NodeDataChanged:节点数据更改。get -w
  • NodeDeleted:节点被删除 get -w
  • NodeChildrenChanged:创建子节点/删除子节点 ls -w
  • NodeCreated :节点创建
zookeeper副本实现:


  • 节点和向导选举:多个服务器节点构成,其中一个被选举成向导者,其它的作为跟随着。向导者负责协调全部写操作,并确保全部的跟随着都有最新的数据。Zab协议。
  • 数据同步:向导者负责全部写操作。当向导者接收到写请求时,他会将请求发送给全部跟随者,并等候它们简直认。跟随者在接收到写请求后,会记录在当地,并向向导者发送确认。只有当凌驾半数的节点(包罗向导者本身)确认后,写操作才被认为是成功的。
  • 读操作:可以由任何跟随者处理,无需举行协调。
  • 故障转移:假如一个跟随者失效,集群可以继续运行,只有凌驾半数节点可用,集群可以继续提供服务。假如向导者失效,剩余跟随者将立即开始新一轮选举,以选择新的向导者。在新向导者被选出之前,集群无法处理写操作。
   假如想要确保读取的数据是最新的(强一致性),每次读取之前可以执行一次"空写操作"。或者显式调用sync.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表