Zookeeper与Paxos

初识Zookeeper

  • zookeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。
  • 在解决分布式数据一致性方面,zk没有直接采用Paxos算法,而是采用了一种被称为ZAB(Zookeeper Atomic Broadcast)的一致性协议。
  • zk可以保证如下分布式一致性特性:
    • 顺序一致性:从同一个client发起的事务请求,最终会被严格按照发起顺序被应用到zk中。
    • 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况一致。
    • 单一视图:无论client连接哪个zk server,其看到的服务端数据模型都是一致的。
    • 可靠性:一旦server端成功应用了一个事务,并成功对client响应,那么该事务所引起的服务端状态变更会被一直保存,知道另一个事务变更。
    • 实时性:zk仅保证在一定时间段内,client最终一定能从server上读取到最新的数据状态。

zk设计目标

  • 简单的数据模型:zk使得分布式程序能够通过一个共享的、树形结构的名字空间来进行相互协调。
  • 可以构建集群:集群中只要有超过一半的机器能正常工作,集群就能对外提供服务。client会和集群中任意一台机器建立TCP连接,断开后,client会自动连接到另一台机器。
  • 顺序访问:对于client的每个更新请求,zk都会分配一个全局唯一的递增编号,该编号反应了所有事务操作的先后顺序,app可以用zk的这个特性来实现更高层次的同步原语。
  • 高性能:zk将全量数据存储在内存中,并直接服务client的所有非事务请求,因此尤其适用于以读操作为主的应用场景。

zk的基本概念

集群角色

  • 集群角色:最典型的集群模式是Master/Slave模式。能够处理写操作的称为master,所以通过异步复制方式获取最新数据并提供读服务的为slave。
  • 而zk中没有沿用传统的主从模式,而是引入了Leader、Follower和Observer三种角色。
  • zk中所有机器通过一个leader选举过程来选定一台被称为leader的机器,leader server为client提供读写服务。
  • follower和observer都能提供读服务,唯一区别在于observer不参与leader选举过程,也不参与写操作的“过半写成功”策略。因此,observer在不影响写性能的情况下提升集群的读性能。

会话(Session)

  • 在zk中,一个客户端连接是指client和server之间的一个TCP长连接。
  • 通过这个连接,client可以通过心跳检测与服务器保持有效的会话,也能够向zk server发送请求并接受响应。
  • Session的 sessionTimeout值用来设置一个客户端会话的超时时间。当服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致client连接断开时,只要在sessionTimeout 时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。

数据节点(Znode)

  • zk中的节点,一类是构建集群的机器,称为机器节点;另一类则是数据模型中的数据单元,称为数据节点ZNode。
  • zk将所有数据存储在内存中,数据模型是一棵树(ZNode Tree)。
  • 每个znode上会保存自己的数据内容,同时还会保存一系列属性信息。
  • zk还允许每个节点添加一个特殊的属性:SEQUENTIAL。该属性是一个整形数字,是一个由父节点维护的自增数字。

版本

  • 对于每个znode,zk都会为其维护一个叫做Stat的数据结构,Stat记录了该Znode的三个数据版本,分别是version(当前znode的版本)、cversion(当前znode子节点的版本)和aversion(当前znode的ACL版本)。

Watcher

  • Watcher(事件监听器)是zk中一个很重要的特性。zk允许用户在指定节点上注册一些watcher,并在一些特定事件触发时通知感兴趣的client。

ACL

  • zk采用ACL(Access Control Lists)策略来进行权限控制。

ZK的ZAB协议

ZAB协议

  • 事实上,zk并没有完全采用Paxos算法,而是使用了Zookeeper Atomic Broadcast即zk原子消息广播协议作为其数据一致性的核心算法。
  • ZAB是为zk专门设计的支持崩溃恢复的原子广播协议。
  • zk主要依赖ZAB协议来实现分布式数据的一致性。基于该协议,zk实现了一种主备模式的系统架构来保持集群中各副本之间数据的一致性。
    • 具体的,zk使用一个单一的主进程来接收并处理client的所有事务请求,并采用ZAB的原子广播协议,将server数据的状态变更以事务Proposal的形式广播到所有的副本进程上。
    • 由于顺序执行的状态变更前后会存在一定的依赖关系,ZAB协议需要保证若一个状态变更被处理时,所有其依赖的状态变更都应该已经被处理了。
    • 考虑到主进程可能崩溃,ZAB协议还需要在主进程崩溃时保持正常工作。
时间: 2024-10-15 05:07:54

Zookeeper与Paxos的相关文章

七:zookeeper与paxos的分析

zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 好抽象,我们改变一下方式,先看看它都提供了哪些功能,然后再看看使用它的这些功能能做点什么. 二.            zookeeper提供了什么 简单的说,zookeeper=文件系统+通知机制. 1. 文件系统 Zookeeper维护一个类似文件系统的数

Zookeeper与paxos算法

一. zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 好抽象,我们改变一下方式,先看看它都提供了哪些功能,然后再看看使用它的这些功能能做点什么. 二. zookeeper提供了什么 简单的说,zookeeper=文件系统+通知机制. 1. 文件系统 Zookeeper维护一个类似文件系统的数据结构: 每个子

[从Paxos到ZooKeeper][分布式一致性原理与实践]<一>

目录 分布式架构 从集中式到分布式 从ACID到CAP/BASE 一致性协议 2PC与3PC Paxos算法 Paxos的工程实践 Chubby Hypertable Zookeeper与Paxos 初始Zookeeper Zookeeper的ZAB协议 使用Zookeeper 部署与运行 客户端脚本 Java客户端API 开源客户端 Zookeeper的典型应用场景 Zookeeper技术内幕 系统模型 序列化与协议 科幻端 会话 服务器启动 leader选举 ... Zookeeper运维

《从PAXOS到ZOOKEEPER分布式一致性原理与实践》pdf

下载地址:网盘下载 内容简介  · · · · · · <Paxos到Zookeeper:分布式一致性原理与实践>从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:第一

Paxos与zookeeper

1,什么是Paxos算法? Paxos算法是分布式计算领域中一个非常重要的算法,主要解决分布式系统如何就某个值(决议)达成一致的问题.一个典型的场景是分布式数据库的一致问题:如果分布式数据库的各个节点初始状态一致,又能执行相同的操作序列,那么最后能达到一个一致的状态.但是如何保证在每个节点上执行相同的命令序列呢?这就需要在每条指令上执行一个“一致性算法”以保证每个节点看到的指令一致.Paxos算法便是这样一种一致性算法,它由大牛Lamport于1990年提出,在Lamport的论文中,他虚拟了一

zookeeper学习系列:四、Paxos算法和zookeeper的关系

一.问题起源 淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html  提到Paxos是zookeeper的灵魂 有一篇文章标题更是以“Zookeeper全解析——Paxos作为灵魂” 作为标题,认为是zookeeper的基础: “ Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的,Paxos还被认为是到目前为止唯一的分布式一致性算法,其它的算法都是Paxos的改进或简化.有个问题要提一下

《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载

内容简介 Paxos到Zookeeper分布式一致性原理与实践从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:前一部分(第1章)主要介绍了计算机系统从集中式向分布式系统

【转】Paxos算法细节详解

最近研究zookeeper因此就学习了一下paxos算法,一直没太看懂,今天找到了这篇文章描述的很清晰,转自:http://www.cnblogs.com/endsock/p/3480093.html Paxos分析 最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bitbucket.org/sciascid/libpaxos 下载.对paxos算法有初步了解之后,再

深入浅出Zookeeper

能找到的一些zookeeper的资料一上来不是扯一通paxos算法就是一大坨一大坨的代码.很多人对zookeeper更多的是听过,所以这一篇文章就尝试用尽可能用精简的语言科普zookeeper. zookeeper是什么 网上的定义:zookeeper作为一个开源的分布式应用协调系统,作为一个正常人我看完这句话之后是——懵逼.理解一个工具最好的办法是问它解决什么问题的,举个例子: 微服务中每个服务是可以被单独部署的,为了便于Client调用,所有服务都必须在注册中心完成注册.这样Client就可