我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019年全年资料内部公开36码 > 强一致性 >

zookeeper所能保证的一致性

归档日期:08-15       文本归类:强一致性      文章编辑:爱尚语录

  假设有一个Zookeeper集群(N=3,N为奇数),那么只有一个Leader(通过FastLeaderElection选主策略选取),所有的写操作(客户端请求Leader或Follower的写操作)都由Leader统一处理,Follower虽然对外提供读写,但写操作会提交到Leader,由Leader和Follower共同保证同一个Follower请求的顺序性,Leader会为每个请求生成一个zxid(高32位是epoch,用来标识leader选举周期,每次一个leader被选出来,都会有一个新的epoch,标识当前属于哪个leader的统治时期,低32位用于递增计数)

  针对同一个Follower A提交的写请求request1、request2,某些Follower虽然可能不能在请求提交成功后立即看到(也就是强一致性),但经过自身与Leader之间的同步后,这些Follower在看到这两个请求时,一定是先看到request1,然后再看到request2,两个请求之间不会乱序,即顺序一致性

  不管这多个客户端的请求顺序如何交叠,都可以,但是必须按照请求到达的顺序执行,即顺序一致性

  相应的也要看是针对一个客户端达到顺序一致性还是针对所有客户端都达到顺序一致性,实现也是不同的

  在设计和证明运行在该计算机上的多进程算法[1]-[3]的正确性时,通常基于如下假设:执行结果与这些处理器以某一串行顺序执行的结果相同,同时每个处理器内部操作的执行看起来又与程序描述的顺序一致。满足该条件的多处理器系统我们就认为是sequential consistent的。这里的处理器就代表了一个独立的执行进程(或线程),每个进程(线程)内部是串行执行的。如果并行执行的结果与某个合法的串行执行顺序(在这个执行顺序中每个线程内部的执行顺序要保留)的执行结果一致,我们就认为它是符合顺序一致性的。

  Leader在处理第4步Follower的ack回复时,采用过半数响应即成功原则,也就是这时候有的Follower是还没有处理或者处理成功这个请求的

  总之:Follower通过队列和zxid等顺序标识保证请求的顺序处理,一言不合就会重新同步Leader

  由于过半响应成功原则,若有接收不到的,读取到的数据可能是过期的旧数据,不是最新的数据。

  对于zookeeper来说,它实现了A可用性、P分区容错性、C中的写入强一致性,丧失的是C中的读取一致性。

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

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

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

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

  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在写数据时,一致性在读到的之后的值进行更新。

  cache coherence 的coherence这个词猜测是体系结构圈为了和memory consistency做区分,用了coherence这个词,但我理解缓存一致性和分布式多副本数据的一致性基本接近,只不过cache coherence是一种同步可靠通信、有全局时钟条件下的强一致(linearizability)。cache一致性协议有MSI,MESI等,虽然处理器的整个内存系统很复杂,还要考虑多层cache,但就cache一致性协议来说,比分布式环境下的数据一致要简明一些

  多核处理器每个核会有私有cache,也就是内存里的一份数据在多个核上可能有了副本,这多个副本,每个核都可能会对一个内存地址有读写操作,每个核是直接读写自己私有的副本,这就要求各个副本上的读写操作顺序要一致,这和分布式环境下的数据一致性很接近。

  假设有三个CPU A、B、C,对应三个缓存分别是cache a、b、 c。在主内存中定义了x的引用值为0。

  从主内存通过bus读取到缓存中(远端读取Remote read),这是该Cache line修改为E状态(独享).

  CPU B试图从主内存中读取x时,CPU A检测到了地址冲突。这时CPU A对相关数据做出响应。此时x 存储于cache a和cache b中,x在chche a和cache b中都被设置为S状态(共享)。

  内存一致性说的是共享内存多核处理器访存序的问题,进程对某一个内存地址(和分布式的同一数据多副本的一致性有所区别)的访问序的在多核下暴露出的问题。也就是程序中 Load Store 的(ISA)顺序(冯诺依曼架构下看可以看做内存操作请求的顺序)和Load Store实际执行完成的顺序可能相同、可能不同(这取决于微体系结构的实现),在多核情况下,程序的正确性可能出问题。有各种一致性模型来表达各种程度的相同不同,相应的有软、硬件机制来确保多核处理器上程序的正确运行。

  不管这多个处理器对同一内存的请求顺序如何交叠,都可以,但是内存必须按照请求到达的顺序执行(这里应该隐含着对同一地址先请求(指令发射)的先到达(指令执行)的假设),这样保证上面的互斥协议正确。这样的要求称为顺序一致的要求,是很严格的,会对硬件性能造成影响,其实可以放宽,不必严格按请求顺序执行,但是必须有软件机制来提供正确的互斥协议的实现

  分布式系统为了性能、容错的需要,数据进行多副本冗余是一项很基本的技术。数据一致性说的是一份数据有多个副本,在多个副本上的读写操作的顺序要达成一致,这个一致也有很多不同的强弱要求,产生了众多的强弱一致性模型,这些模型的术语和内存一致性的术语有很大的重叠,可能是历史上并行体系结构和分布式系统两个领域是一伙人在搞?

  线性一致性和顺序一致性都是强一致性 都给客户端提供单副本的假象 Linearizability关乎时间,sequential consistency 关乎程序顺序

  分布式下强一致是个困难问题,著名的paxos算法挺复杂的,Raft是2014年出的一个可以看作是改良版的算法。

  内存的顺序一致性和分布式哪一种强一致性是一样的呢?是顺序一致性么?因为分布式环境下没有全局时间,所以分布式数据顺序一致性退化成较弱的一种一致性,而Linearizability和内存的顺序一致性更接近。

  对于顺序一致性来说,它要找到一个合法的顺序执行过程(只要能找到一个即可),该执行过程要保留线程内部原有的顺序(对应到上图就是:[Set 1]一定要在[Get 2]之前,[Set 3]一定要在[Set 2]之前)。根据这个要求我们可以发现:[Set 1] [Set3] [Set 2] [Get 2]就是一个合法的顺序执行过程。对于一个寄存器来说,合法的顺序执行过程需要满足这个条件:Get到的值一定是最近一次Set的那个值。

  而对于线性一致性来说,它也是要找到一个合法的顺序执行过程(只要能找到一个即可)。但是这个顺序执行过程,不仅要保留线程内部的先后顺序,还要保留线程之间的操作的先后顺序。比如上图从时间线]是最先发生的,[Get 2]和[Set 3]时间上有交叉,在线性一致性模型中,我们认为这两个是并行的,先后顺序不定,最后的[Set 2]一定是最后发生。这样满足线程内部和线程间顺序约束的执行过程只有两种,如上图所示。但是这两种执行过程都不是合法的:对于[Set 1] [Set 3] [Get2] [Set 2]来说,Set 3之后却Get到了2;对于[Set 1] [Get 2] [Set3] [Set 2]来说,Set 1之后却Get到了2。所以不满足线性一致性。

  众所周知,zookeeper是一个开源的分布式协调服务,很多分布式的应用都是基于zookeeper来实现分布式锁,服务管理,服务发现,通知订阅等功能。那么。zookeeper自身是如何在分布式环境下实...博文来自:q的博客

  ZooKeeper为存储的数据提供了一致性保证,不管应用从哪个服务端获取数据,都能获取到一致的数据。ZooKeeper内部使用原子广播协议(Zab)作为其一致性复制的核心,并通过对服务端请求的排序达到...博文来自:宁静致远

  zookeeper(简称zk),顾名思义,为动物园管理员的意思,动物对应服务节点,zk是这些节点的管理者。在分布式场景中,zk的应用非常广泛,如:数据发布/订阅、命名服务、配置中心、分布式锁、集群管理...博文来自:大树叶 技术专栏

  从Paxos到Zookeeper++分布式一致性原理与实践(高清完整带书签)下载

  在2017年饿了么做异地多活建设之时,我的团队承担了Zookeeper的异地多活改造。在此期间,我听到了关于Zookeeper一致性的两种不同说法:一种说法是Zookeeper是最终一致性,由于多副本...博文来自:weixin_33690367的博客

  在前面的两篇文章中了解过了Zookeeper的基本原理使用以及分布式集群的基本CAP定理:Zookeeper探究之基础知识总结分布式系统理解之CAP理论的发展本篇文章我们将深入Zookeeper的核心...博文来自:不清不慎的博客

  一致性Hash算法背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hotspot)问题,初衷和CARP十分类似。一致...博文来自:weixin_33964094的博客

  很多文档说Zookeeper是强一致性保证,事实不然。关于一致性模型请参考的数据同步协议Zookeepe...博文来自:bit1129的博客

  zookeeper本身支持单机部署和集群部署,生产环境建议使用集群部署,因为集群部署不存在单点故障问题,并且zookeeper建议部署的节点个数为奇数个,只有超过一半的机器不可用整个zk集群才不可用。...博文来自:zhaoyangjian724的专栏

  zookeeper主要应用事务日志和数据快照来实现底层数据一致性;事务日志事务日志是记录zookeeper事务操作的日志文件。以ZXID为事务日志文件名的后缀,可以快速的定位到查询的事务。采用“磁盘空...博文来自:PeersLee的博客

  如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据。已上图为例,如果一个zk集群有10000台节点,当进行写入的时候,如果已经有6K个节点写入成功,zk就认为本次写请求成功。但是...博文来自:疯狂的蚂蚁

  ZooKeeper是个集群,内部有多个server,每个server都可以连接多个client,每个client都可以修改server中的数据ZooKeeper可以保证每个server内的数据完全一致...博文来自:格色情调的博客

  2017饿了么做异地多活,我的团队承担Zookeeper的异地多活改造。在此期间我听到2种不同的关于一致性的说法。一种说法是Zookeeper是最终一致性,因为由于多副本、以及保证大多数成功的Zab协...博文来自:cadem的专栏

  zookeeper 顺序性如何保证?zk读写操作特点:所有执行都是推送,异步但顺序.1.对Leader而言   因为和集群其他节点都是单长连接通道交互的.中间通过队列缓存.二者都是顺序性的.所以所有请...博文来自:fei33423的专栏

  《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式一致性问题的工业...

  从Paxos到Zookeeper分布式一致性原理与实践(含源码) 高清完整版 pdf 百度云链接

  ZookeeperPaxos算法一致性协议    前言Paxos一致性协议可以说是一致性协议研究的起点,也以难以理解闻名。其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证...博文来自:yexiaomodemo的专栏

  Zookeeper使用了一种称为Zab(ZookeeperAtomicBroadcast)的协议作为其一致性复制的核心,据其作者说这是一种新发算法,其特点是充分考虑了Yahoo的具体情况:高吞吐量、低...博文来自:老码农的专栏

  内容简介 · · · · · · 《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,...

  《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式一致性问题的工业...

  从Paxos到Zookeeper分布式一致性原理与实践-高清带书签版pdf 第1章 分布式架构 第2章 一致性协议 第3章 Paxos的工程实践 第4章 Zookeeper与Paxos 第5章 使用Zookeeper 第6章 Zookee...

  PAXOS到ZOOKEEPER分布式一致性原理与实践,学习zookeeper必备书

  如题,3台服务器组成集群,其中两台关闭仅剩一台,则客户端无法连接上zookeeper论坛

  一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: 场景一有这样一个场景:系统中有大约100w的用户,每个用户平均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100...博文来自:xiaojie19871116的博客

  Zookeeper系列,会从分布式一致性理论开始介绍,设计诸如:CAP,BASE理论,分布式一致性算法:2PC,3PC,Paxos,ZAB以及Zookeeper的节点特性,Zookeeper如何保证一...博文来自:怕什么真理无穷, 进一寸有一寸的欢喜

  Paxos,发音近似帕克索斯。问题的提出并发的定义(来自《深入理解计算机系统》):如果逻辑控制流在时间上重叠,那么他们就是并发的。本书的并发,指更新操作的并发,即有多个线程同时更新内存中变量的值。数据...博文来自:lonelymanontheway的博客

  Paxos算法算法中的参与者主要分为三个角色,同时每个参与者又可兼领多个角色:proposer提出提案,提案信息包括提案编号和提议的value;acceptor收到提案后可以接受(accept)提案;...博文来自:衣舞晨风

  1.基本概念:(1).是一个针对大型分布式系统的可靠协调系统。(2).目标就是封装好复杂,易出错的关键服务。Zookeeper的特点:数据一致性,可靠性,实时性,等待无关,原子性,顺序性。使用Zook...博文来自:的博客

  1)一致性保证 Zookeeper是一种高性能、可扩展的服务。Zookeeper的读写速度非常快,并且读的速度要比写的速度更快。另外,在进行读操作的时候,ZooKeeper依然能够为旧的数...博文来自:张林林深蓝(Linlin Zhang,shenlan211314) 的专栏

  分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如namingservice、分布式lock等,这些分布式的...博文来自:走向架构师之路

  数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据...博文来自:weixin_30194391的博客

  网站更多书籍点击进入gt;gt;CiCi岛下载电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍电子书下载(皮皮云盘-点击“普通下载”)购买正版封...博文来自:CiCi岛的专栏

  Fiercecoding:我需要统计商品属性,对商品属性进行聚类时是不是需要将冗余词去掉?

  Fiercecoding:请问在完成TF-IDF后如何建立聚类模型?有什么资料吗?

  Fiercecoding:您好,如果我需要对一个含有几千条数据的文本进行TF-IDF,是否还需要其它处理?

  Huangxiang6:楼主 这个软件有一个bug,就是延时设置为0时,仍然会有一定基数的延时。

本文链接:http://ravynhart.com/qiangyizhixing/492.html