`
youlong699
  • 浏览: 21839 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

zk学习笔记 -- zooker overview

 
阅读更多

http://zookeeper.apache.org/doc/r3.3.2/zookeeperOver.html#fg_zkPerfRW



ZooKeeper    A Distributed Coordination Service for Distributed Applications
        ====================================================
zk 提供了一系列的原语(primitives),基于这些原语,可以构建出更高层次的服务,诸如同步、配置维护、分组、命名等。zk 使用了类似文件系统的树结构。
Design Goals:
简单        - zk使用类似文件系统结构的层级化命名空间实现分布式过程的协同
replicated    - zk如同它所协同的系统一样,也被设计成可复制的系统,基于被称为ensemble的主机群
有序        - zk的每一次更新都会被赋予一个编号, 编号能够反映所有zk事务的顺序
快速        - 对于高读写比的场景,zk能够提供特别快的速度,zk的应用在数千台机器上运行,通常读写的比例大约在10:1的情况下,zk能以最好的状态运行

Guarantees:
·顺序一致性    - client提交的update会按照其发送顺序执行
·原子性    - update 要么成功要么失败,没有其他结果
·单一系统镜像    - 连接到任意server的client获取到的服务是相同的
·可靠        - 一次生效的update会一直存在,直到client的再次update将其覆盖
·时效性    - 在一定的时间范围内,clients将会看到最新的server状态

Operations:
create         - 在tree上创建一个node
delete         - 删除一个node
set date    - 向一个node写入数据
get date    - 从一个node读取数据
exits        - 测试在某个位置是否存在一个node
get children    - 读取(retrievs)一个node的children列表
sync        - 等待数据的传播


Nodes and ephemeral nodes

和标准的文件系统不同的是,zk名称空间里的node既可以存储数据也可以关联,为了含义明确zk里的node被称为znode。
znode维护一个状态结构,包扩数据变更与acl变更的版本信息、用于缓存验证和协同更行的时间戳。znode数据的每次更新都会伴随着版本号的增加。客户端每次检索数据也会同时检索该数据的版本。
命名空间里每个znode的读写动作都是原子的。读取会获得znode上的所有数据,写会替换所有数据。每个znode拥有一个访问控制列表(ACL),定义了谁可以做什么
zk有ephemeral node。ep node存在于创建该node的会话的活动期间,当会话结束时,该node被删除。

Conditional updates and watches

zk支持watches的概念。客户端可以在znode上设置watch,当znode变更时watch将会被触发以及移除。当一个watch被触发时,它将会接收到一个表示znode发生了变更的数据包。当client与其中一个server的连接断开时,client将会受到一个local notification 。


Implementation

每个zk集群中的server除了request proccessor结构意外,都对其他server做了本地副本。在server上,整个data tree是放到一个内存数据库replicated database里的。通过将更新记录到磁盘日志里提供了可恢复性,写入会先序列化到磁盘然后再应用到in-memory database。
每个zk server都对client提供服务。client连接到一个具体的server进行请求的提交。读请求通过每个server的副本db得到处理。改变server状态的请求、写请求通过一致性协议(agreement protocol)处理。
作为一致性协议的一部分,所有的写请求都被传递到一个被称为leader的server进行处理。其余的被称为followers的server,接收来自leader的建议消息并对消息的传递达成一致。消息层负责替换失效的leader,并使followers同步到leader
zk使用一种自定义的原子消息协议。消息协议的原子性保证了本地副本不会产生偏差。当leader接收到一个写请求时,它会计算写请求生效后的状态,并生成一个表达该新生状态的事务

agreement protocol:
·所有来自client的请求都会被传递到被称为leader 的一个server,其他的server被称为 followers, follower 接收来自于leader的提议消息(message proposals)并对消息的传递达成一致(agree upon message delivery)。消息层(message layer)负责当leader 失败时替换新的leader并将follower同步到新的leader。
·消息层使用定制的原子消息传送协议(sustom atomic messaging protocol)。 消息传递的原子性保证了本地副本不会产生不一致。当leader接收到写请求时,它会计算写操作应用之后的系统状态然后将写操作转化为一个相应的事务。   


ZooKeeper Programmer's Guide
================================

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics