`
bit1129
  • 浏览: 1073023 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【分布式数据一致性二】Zookeeper数据读写一致性

 
阅读更多

很多文档说Zookeeper是强一致性保证,事实不然。关于一致性模型请参考http://bit1129.iteye.com/blog/2155336

 


 Zookeeper的数据同步协议

Zookeeper采用称为Quorum Based Protocol的数据同步协议。假如Zookeeper集群有N台Zookeeper服务器(N通常取奇数,3台能够满足数据可靠性同时有很高读写性能,5台在数据可靠性和读写性能方面平衡最好),那么用户的一个写操作,首先同步到N/2 + 1台服务器上,然后返回给用户,提示用户写成功。基于Quorum Based Protocol的数据同步协议决定了Zookeeper能够支持什么强度的一致性

 

强一致性(Strong Consistency)

在分布式环境下,满足强一致性的数据储存基本不存在,它要求在更新一个节点的数据,需要同步更新所有的节点。这种同步策略出现在主从同步复制的数据库中。但是这种同步策略,对写性能的影响太大而很少见于实践。因为Zookeeper是同步写N/2+1个节点,还有N/2个节点没有同步更新,所以Zookeeper不是强一致性的。

 

弱一致性

用户的数据更新操作,不保证后续的读操作能够读到更新后的值,但是最终会呈现一致性。牺牲一致性,并不是完全不管数据的一致性,否则数据是混乱的,那么系统可用性再高分布式再好也没有了价值。牺牲一致性,只是不再要求关系型数据库中的强一致性,而是只要系统能达到最终一致性即可

 

CopyOnWriteArrayList是一个读写分离的并发ArrayList,它的遍历是弱一致性的,因为可以容忍并发修改,不会抛出ConcurrentModificationException,不像普通的集合,允许即时失败。

 

最终一致性

最终一致性本质上和弱一致性是一回事,因为一个数据存储系统满足弱一致性但是不满足最终一致性,那么这个系统的数据就是不正确,一个数据不正确的系统是一个无法交付使用的系统。Zookeeper满足最终一致性,只要数据同步到Quorum之外的节点就会达到最终一致性。

 

因果一致性

Zookeeper是否满足因果一致性,需要看客户端的编程方式。

  • 不满足因果一致性的做法

1. A进程向Zookeeper的/z写入一个数据,成功返回

2. A进程通知B进程,A已经修改了/z的数据

3. B读取Zookeeper的/z的数据

4. 由于B连接的Zookeeper的服务器有可能还没有得到A写入数据的更新,那么B将读不到A写入的数据

 

  • 满足因果一致性的做法

1. B进程监听Zookeeper上/z的数据变化

2. A进程向Zookeeper的/z写入一个数据,成功返回前,Zookeeper需要调用注册在/z上的监听器,Leader将数据变化的通知告诉B

3. B进程的事件响应方法得到响应后,去取变化的数据,那么B一定能够得到变化的值

4. 这里的因果一致性提现在Leader和B之间的因果一致性,也就是是Leader通知了数据有变化

 

第二种事件监听机制也是对Zookeeper进行正确编程应该使用的方法,所以,Zookeeper应该是满足因果一致性的

 

 

读你所写(写后读)一致性

严格来说,Zookeeper不满足读你所写一致性。因为在一个进程中,如下的操作序列是Zookeeper不能保证的, 会话建立->写数据->会话关闭->会话建立->读数据,最后的读数据不一定读到之前写的数据。

 

MongoDB是否满足读你所写一致性?MongoDB是满足的,因为它是连接信息跟线程绑定的,意思是说,读写线程跟MongoDB的连接信息是绑定的,读写线程获取连接优先连接到之前连接到的服务器。

 

会话一致性

在一个会话过程中,Zookeeper满足读你所写一致性。因为Zookeeper不同于MongoDB或者其它分布式系统,是读写数据结束立即释放连接。而Zookeeper是长连接的(用于监听Zookeeper的事件)。

Zookeeper提供了会话的自动重连机制,当客户端连接的Zookeeper服务器出现故障而不可达时,客户端会自动尝试重连到另外一台机器,客户端选择的那台服务器的数据状态不比之前连接的那台机器旧,因此会话重连也会保证会话一致性。

 

 

单调读一致性

严格来说,Zookeeper不满足单调读一致性。因为在一个进程中,如下的操作序列是Zookeeper不能保证的, 会话建立->写数据->读数据->会话关闭->会话建立->读数据,最后的读数据不一定是之前写到的数据

 

单调写一致性

Zookeeper满足。只要Zookeeper写成功了一个操作,那么后面的写肯定是在Zookeeper提交了前一个写之前,而不管是否在同一个会话中,因为Zookeeper的写操作是全局顺序性。

 

读后写一致性

Zookeeper满足读后写一致性。当Zookeeper读到一个数据后,那么Zookeeper在写数据时,一致性在读到的之后的值进行更新。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

分享到:
评论

相关推荐

    从PAXOS到ZOOKEEPER分布式一致性

    《从PAXOS到ZOOKEEPER分布式一致性》是一份深度探讨分布式系统一致性问题的资料,其中涵盖了PAXOS算法的基础理论以及ZOOKEEPER在实际应用中的实践。分布式一致性是构建大规模、高可用系统的关键技术,对于理解和解决...

    从Paxos到Zookeeper 分布式一致性原理与实践

    《从Paxos到Zookeeper:分布式一致性原理与实践》这本书深入探讨了分布式系统中至关重要的“一致性”问题。在当今大数据和云计算的时代背景下,分布式一致性是构建高可用、高性能服务的基础,也是许多大型互联网公司...

    基于zookeeper实现的分布式读写锁

    在实际项目中,基于Zookeeper的分布式读写锁常用于数据库的并发控制、分布式缓存如Redis的锁保护,以及其他需要确保数据一致性的场景。例如,使用Zookeeper和Redis结合,可以构建高可用的分布式缓存系统,其中Redis...

    从Paxos到Zookeeper 分布式一致性原理与实践完整版

    《从Paxos到Zookeeper:分布式一致性原理与实践》是一本深入探讨分布式系统中一致性问题的权威著作。这本书详细阐述了从理论到实践的分布式一致性解决方案,涵盖了Paxos算法及其在Zookeeper中的应用。 Paxos算法是...

    从Paxos到Zookeeper 分布式一致性原理与实践.

    分布式一致性是现代大规模系统设计中的核心概念,它关乎如何在多台计算机之间保持数据的一致性和可用性。《从Paxos到Zookeeper:分布式一致性原理与实践》这本书深入浅出地介绍了这一主题,让我们一起探索其中的关键...

    Zookeeper分布式应用程序协调服务:zookeeper-3.4.13

    Zookeeper是Apache Hadoop生态体系中的一个重要组成部分,作为一个分布式协调服务,它在处理分布式环境中的数据管理和一致性问题上发挥着核心作用。Zookeeper-3.4.13是该服务的一个稳定版本,提供了多种关键功能,以...

    从Paxos到Zookeeper 分布式一致性原理与实践.zip

    分布式一致性是现代大规模系统设计中的核心问题,它关乎着数据在多台计算机之间的同步与协调。Paxos算法和Zookeeper是解决这一问题的两个重要工具。本篇内容将深入探讨这两个概念及其在实践中的应用。 Paxos算法,...

    ZooKeeper-分布式过程协同技术详解 和从Paxos到Zookeeper

    《ZooKeeper:分布式过程协同技术详解》与《从Paxos到Zookeeper:分布式一致性原理与实践》这两本书深入探讨了分布式系统中的关键组件ZooKeeper及其背后的一致性算法Paxos。ZooKeeper是由Apache软件基金会开发的一个...

    zookeeper分布式协调案例

    Zookeeper,作为Apache软件基金会的一个开源项目,是分布式系统中的核心组件,专为管理分布式应用提供高可用性、一致性以及数据同步等服务。其设计目标是简化分布式环境下的复杂操作,使得开发者能够更专注于业务...

    ZooKeeper 分布式

    在分布式系统中,数据一致性、服务发现、配置管理、锁服务等都是常见的挑战,而ZooKeeper则提供了统一的接口来解决这些问题。 一、ZooKeeper的基本概念 1. ZooKeeper节点:ZooKeeper的数据存储以树形结构进行组织,...

    分布式同步系统Zookeeper的优化.pdf

    在分布式系统中,Zookeeper通常扮演着“协调者”的角色,负责维护配置信息、协调分布式应用的一致性和同步。 在Zookeeper中,存在一个节点响应机制,这个机制决定了哪些节点将负责响应客户端的数据更新请求。如果...

    zookeeper开源的分布式协调服务之分布式环境搭建

    ### ZooKeeper 分布式协调服务的关键特性与应用场景 #### 一、一致性 ZooKeeper 提供了一种强一致性的...无论是用于实现数据一致性、还是作为分布式锁的服务,ZooKeeper 都能够有效地提升分布式系统的可靠性和性能。

    zookeeper, 分布式系统服务ZooKeeper的学习历程.zip

    ZooKeeper源于分布式计算领域的实际需求,旨在解决分布式环境中的数据一致性问题。它是一个集中式的服务,提供简单的数据模型和操作接口,让开发者能够快速构建复杂的分布式应用。 二、ZooKeeper的主要功能 1. 命名...

    基于ZooKeeper的分布式Session实现

    总结来说,基于ZooKeeper的分布式Session实现利用其分布式特性和一致性保证,解决了分布式环境下的Session一致性问题。通过文档"基于ZooKeeper的分布式Session实现.doc",读者可以深入学习如何设计和实现这样的系统...

    分布式专题-分布式协调服务02-Zookeeper的核心原理

    Zookeeper的主要设计目标是防止单点故障并确保数据一致性。为此,它采用了集群架构,每个节点都能接收请求,并通过一种被称为ZAB(Zookeeper Atomic Broadcast,原子广播协议)的协议来保持数据的一致性。ZAB协议是...

    zookeeper实现分布式session sample

    - Zookeeper是一个分布式服务框架,主要用于解决分布式应用中的数据一致性问题。 - 它提供了一种树形的数据结构,节点称为Znode,每个Znode可以存储数据并有唯一的路径标识。 - Zookeeper提供了多种watch机制,...

    分布式服务框架zookeeper 3.4.13版本

    Zookeeper源于雅虎研究院的一个研究项目,后来成为了Apache软件基金会的顶级项目,其设计目标是为分布式应用程序提供一致性服务。 Zookeeper的核心功能包括命名服务、配置管理、集群同步、领导者选举以及分布式锁等...

    ZooKeeper分布式过程协同技术详解_new.pdf

    在分布式环境中,一致性、可用性和容错性是核心挑战,ZooKeeper便是为解决这些问题而设计的。 ZooKeeper的设计理念基于一个简单的模型,即每个节点(称为znode)都可以存储数据,并且可以监听其他节点的变化。这种...

    分布式事务与一致性算法 Paxos & raft & zab.pdf

    ZAB算法(Zookeeper Atomic Broadcast)是Apache Zookeeper使用的分布式一致性算法。ZAB算法重点在于处理集群中的主节点故障,保证事务的顺序执行。在ZAB算法中,所有事务请求都是由主节点处理,然后通过广播方式...

Global site tag (gtag.js) - Google Analytics