从 0 开始学大数据
李智慧
同程艺龙交通首席架构师,前 Intel 大数据架构师,《大型网站技术架构》作者
71151 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
智慧写给你的寄语 (1讲)
从 0 开始学大数据
15
15
1.0x
00:00/00:00
登录|注册

16 | ZooKeeper是如何保证数据一致性的?

其他保证分布式系统中不可信任的机器无法篡改或伪造数据的方法
ZooKeeper的性能
主服务器选举
ZooKeeper的数据一致性服务
ZAB算法简化Paxos算法
Paxos算法
一致性、可用性、分区耐受性(CAP原理)
脑裂问题
HDFS的高可用性需求
思考题
ZooKeeper的应用
ZAB算法与ZooKeeper架构
分布式系统一致性与ZooKeeper的架构
ZooKeeper是如何保证数据一致性的?

该思维导图由 AI 生成,仅供参考

你可能还记得,我们在讲 HDFS 和 HBase 架构分析时都提到了 ZooKeeper。在分布式系统里的多台服务器要对数据状态达成一致,其实是一件很有难度和挑战的事情,因为服务器集群环境的软硬件故障随时会发生,多台服务器对一个数据的记录保持一致,需要一些技巧和设计。
这也就是我们今天要讨论的分布式系统一致性与 ZooKeeper 的架构。
在讲分布式系统一致性前,我们先回顾一下 HDFS。HDFS 为了保证整个集群的高可用,需要部署两台 NameNode 服务器,一台作为主服务器,一台作为从服务器。当主服务器不可用的时候,就切换到从服务器上访问。但是如果不同的应用程序(Client)或者 DataNode 做出的关于主服务器是否可用的判断不同,那么就会导致 HDFS 集群混乱。
比如两个应用程序都需要对一个文件路径进行写操作,但是如果两个应用程序对于哪台服务器是主服务器的判断不同,就会分别连接到两个不同的 NameNode 上,并都得到了对同一个文件路径的写操作权限,这样就会引起文件数据冲突,同一个文件指向了两份不同的数据。
这种不同主服务器做出不同的响应,在分布式系统中被称作“脑裂”。光看这个词你也可以看出问题的严重性,这时候集群处于混乱状态,根本无法使用。那我们引入一个专门进行判断的服务器当“裁判”,让“裁判”决定哪个服务器是主服务器不就完事了吗?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ZooKeeper是如何保证数据一致性的?本文首先介绍了分布式系统中数据一致性的挑战,以及CAP原理对于一致性、可用性和分区耐受性的要求。在分布式系统中,要保证数据一致性和高可用性是一项复杂的任务。文章提到了HDFS在保证高可用性时的挑战,以及可能出现的“脑裂”问题。为了解决这些问题,引入了ZooKeeper作为多台服务器状态一致性的解决方案。ZooKeeper通过实现分布式一致性原理,解决了在分布式系统中数据一致性和可用性的矛盾。CAP原理指出,在分布式系统中,必须在分区耐受性的前提下,权衡可用性和一致性。因此,ZooKeeper的架构设计和实现为分布式系统提供了一种可靠的数据一致性保障。通过本文的介绍,读者可以了解到ZooKeeper在分布式系统中的重要作用,以及其如何保证数据一致性的技术特点。 ZooKeeper主要提供数据的一致性服务,其实现分布式系统的状态一致性依赖一个叫Paxos的算法。Paxos算法在多台服务器通过内部的投票表决机制决定一个数据的更新与写入。ZooKeeper通过一种树状结构记录数据,应用程序可以通过路径的方式访问ZooKeeper中的数据,并支持监听模式。利用ZooKeeper提供的API接口,可以实现主服务器的选举服务。ZooKeeper通过ZAB算法实现数据一致性,并为各种大数据系统提供主服务器选举服务。 文章还提到了Paxos算法和ZAB算法的实现原理,以及ZooKeeper在大数据系统中的应用。此外,文章还对分布式系统中数据一致性的挑战进行了深入探讨,以及区块链中的工作量证明算法作为另一种保证数据一致性的解决方案。整体而言,本文通过对ZooKeeper的数据一致性保障机制进行详细介绍,为读者提供了深入了解分布式系统中数据一致性挑战和解决方案的重要参考资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学大数据》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(49)

  • 最新
  • 精选
  • 面试官问
    置顶
    CAP 定理关注的是对数据的读写操作,而不是分布式系统的所有功能,它要求分布式系统节点间是互相连接且有数据共享的,例如 Memcache 的集群中节点相互间没有连接和数据共享,因此不是 CAP 定理讨论的对象,同理 ZooKeeper 的选举机制也不是 CAP 探讨的对象。 摘自从零开始学架构,大家可以探讨下。

    作者回复: CAP的P如果按字面意思理解,网络分区容错,应该是A的一种情况,这样对设计没有指导意义,所以在9年前第一次看到CAP原理,我就按分片理解,这样所有的分布式系统就可以解释了,不存在不能探讨的分布式对象。这次专栏发布后,很多同学对P的理解提出质疑,我又查了下资料,确实这种理解比较激进,可能会造成误导,这部分内容已经删除,很抱歉。 memcached和zk是最典型的分布式系统,一个分布式的关键原理不适用于最典型的分布式系统,老实说,很郁闷。

    2018-12-04
    2
    35
  • 老范
    但是 ZooKeeper 系统中所有服务器都存储相同的数据,也就是数据没有分片存储,因此不满足分区耐受性 建议老师修改下上处:我们用 sharding 表示分片,用 partition 表示网络分区,partion tolerance 和 sharding 二者是不同概念,并没有如老师您所述的关系。 在 CAP 理论中,当网络分区发生时,ZK 选择了 Consistence,舍弃了 Availability。

    作者回复: 谢谢老范

    2019-06-10
    7
  • 阿巍-豆夫
    zk是最终一致性吧,这个没说清楚啊。

    作者回复: 强一致,回复client的时候,zk服务器就已经一致了

    2018-12-04
    2
    6
  • 工科生小猴子
    看完这篇文章,我对zookeeper更加疑惑了。又说zookeeper用来保证数据一致性,一会又是选举主服务器,越看越迷惑。还有,zookeeper集群,到底是一个独立的集群,还是大数据业务集群的一个有机组成部分?????

    作者回复: 选主要求一致性,不然选出两个主就乱套了,不冲突啊。 ZK是一个独立的集群,也被大数据集群用来做选主,是大数据集群的组成部分,不冲突啊。

    2021-02-16
    3
    2
  • Zend
    是否可以在分布式系统中不信任的机器加入黑名单,放在ZooKeeper上。

    作者回复: 如果连zookeeper集群本身的机器就不可信任,黑名单也是不可信任的。 可以参考区块链的实现机制。我在《后端技术》专栏会讲区块链技术架构。

    2019-11-18
    2
    2
  • 不加y
    老师,请教一下,这里zk只是用于active namenode和slave namenode的切换,作为一个锁,谁获得锁,就作为active namenode,和zab算法关系不大吧?或者zab只是保证zk里面的数据一致性。

    作者回复: 和zab算法有关呀,zab算法保证active 和 slave 两个node连接到zk的不同服务器,同时申请锁,但是zk仍能在自己集群的多台服务器之间做出一致性决定:将锁给谁。

    2023-06-03归属地:重庆
  • Jay
    但是这个做出判断决策的服务器也有可能会出现故障不可访问,同样整个服务器集群也不能正常运行。所以这个做出判断决策的服务器必须由多台服务器组成,来保证高可用,任意一台服务器宕机都不会影响系统的可用性。那么问题又来了,这几台做出判断决策的服务器又如何防止“脑裂”,自己不会出现混乱状态呢?有时候真的很无奈,分布式系统设计就像是一个追着自己尾巴咬的喵喵,兜兜转转回到开头。 -------------------------老师在文章中已经提到这个问题,可看完文章,我还是没有理解zookeeper集群本身的一致性是如何保证。 现在只看到zookeeper能够保证注册到它上面服务的一致性

    作者回复: 原文:1 ZooKeeper 主要提供数据的一致性 服务,其实现分布式系统的状态一致性依赖一个叫 Paxos 的算法。2 Paxos 算法有点过于复杂、实现难度也比较高,所以 ZooKeeper 在编程实现的时候将其简化成了一种叫做 ZAB 的算法

    2022-04-08
  • 莎思比亚
    这门课有点捣糨糊的意思,误导…… Zeekeeper是Zookeeper Atomic Broadcast协议

    作者回复: 这块确实,需要订正一下

    2021-12-10
  • M
    P和数据分不分片并没有任何关系吧。在分布式系统中P就是满足的,否则就是单机了。所以一般考虑的是CP和AP,CP是指在网络分区形成(分布式节点之间不能互相通信)的情况下,牺牲可用性,满足一致性,只有等到数据同步完成后才能恢复可用。而AP是指在网络分区形成的情况下,向外部继续提供使用,但是数据可能不一致(因为节点之间不能通信,所有节点的数据可能不一致)
    2018-12-04
    19
  • shangyu
    请问老师 对于文中这句话不太理解:“但是 ZooKeeper 系统中所有服务器都存储相同的数据,也就是数据没有分片存储,因此不满足分区耐受性”。zk没有分片但是都存储了相同数据,也就是有冗余备份,一定是要数据有分片才满足P吗
    2018-12-04
    14
收起评论
显示
设置
留言
49
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部