分布式技术原理与算法解析
聂鹏程
智载云帆 CTO,前华为分布式 Lab 资深技术专家
39663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
分布式技术原理与算法解析
15
15
1.0x
00:00/00:00
登录|注册

26 | 分布式数据复制技术:分身有术

思考题
总结
知识扩展
三种数据复制技术对比
数据复制技术原理及应用
什么是数据复制技术?
分布式数据复制技术

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

你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在上一篇文章中,我为你讲解了数据分布(也称数据分片)技术,主要用于构建数据索引,是实现“导购”功能的关键技术。数据分布的本质是,将原数据集划分为多个数据子集,以存储到不同的地方,在一定程度上体现了数据的可用性和可靠性(一个存储节点故障,只影响该存储节点的数据)。
我在第 24 讲中介绍“导购”时提到,数据分片和数据复制技术均是实现“导购”的关键技术。其中,数据分片是确定数据位置,数据复制是实现数据可靠性的关键方法。
在实际情况下,仅考虑数据分片,其实是无法真正应用到生产环境的。因为,故障导致数据丢失和不可用是很常见的情况。因此,在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,而实现数据备份的关键技术就是“数据复制技术”。
接下来,我们就一起打卡分布式数据复制技术吧。

什么是数据复制技术?

概括来讲,数据复制是一种实现数据备份的技术。比如,现在有节点 1 和节点 2,节点 1 上存储了 10M 用户数据,直观地说,数据复制技术就是将节点 1 上的这 10M 数据拷贝到节点 2 上,以使得节点 1 和节点 2 上存储了相同的数据,也就是节点 2 对节点 1 的数据进行了备份。当节点 1 出现故障后,可以通过获取节点 2 上的数据,实现分布式存储系统的自动容错。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式数据复制技术是分布式系统中的关键技术之一。本文深入探讨了同步复制技术、异步复制技术和半同步复制技术,以及它们在保证数据一致性和系统可用性方面的权衡。同步复制技术保证了数据的强一致性,但牺牲了系统的可用性,适用于对数据一致性要求严格的场景;而异步复制技术保证了系统的可用性,但牺牲了数据的一致性,适用于对用户请求响应时延要求较高的场景。半同步复制技术则介于两者之间,通过具体案例和技术原理,深入浅出地解释了数据复制技术的应用和权衡。文章还介绍了半同步复制技术的两种方式,并举例说明了不同系统中采用的复制技术。此外,还对三种数据复制技术进行了对比,以及在半同步复制技术中解决数据不一致或冲突的方式。通过本文的学习,读者可以深刻理解分布式数据复制技术,并为不同场景选择合适的复制策略提供了指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 南国
    老师,我有一个这样的疑惑,就是raft是通过leader半同步的复制方式,后面通过心跳包来达到最终一致性,那岂不是在用户收到回复消息的一段时间其实系统并未达成共识?

    作者回复: raft后面并不是通过心跳包来达到最终一致性,leader和follower之间的心跳,是为了感知对方是否活着。raft是强一致性算法,并非最终一致性算法哟。

    2020-04-15
    1
  • Brave Shine
    对于异步复制来说,考虑复制失败场景(比如网络分区了应用程序级别的复制会失败)如何保证数据的最终一致性感觉也值得探讨

    作者回复: 这个问题非常好,这个问题其实属于故障恢复问题,当网络分区恢复后,如何保证数据的最终一致性。根据不同的业务可以采用不同的策略,比如根据数据版本号,假设版本号最大的数据最新,那么故障恢复后,以数据版本号最大的数据为准。

    2020-04-12
    1
  • Geek_f6f02b
    给的例子是不是有问题,还是我理解有问题 比如,对于变量 X,Leader 节点记录的操作是{(Index 1, X = 1, Version:0), (Index 2, X=2, Version:1), (Index3 , X=3, Version:2)},其中,Follower 节点 2 记录的操作为{(Index 2, X=1, Version:0) 这里Follower 节点 2 不应该是{(Index 1, X=1, Version:0) 吗?为什么例子是 {(Index 2, X=1, Version:0)

    作者回复: 在分布式并发情况下,不一定保证Index1, X=1, Version:0的这条记录一定由Leader节点同步给Follower节点了

    2019-12-23
  • 随心而至
    换个说法来划分这三种复制策略,假设需要ack个备库确认,那么: 1.ack=all,同步复制 2.ack=0,异步复制 3.1 ack=1,半同步复制的第一种 3.2 ack=quorum,或者叫ack=majority,半同步复制的第二种
    2019-11-25
    2
    43
  • xingoo
    Hdfs3的纠删码机制,通过矩阵运算分块存储,任意部分丢失,都可以用其他的部分计算得出。是典型的网络io+cpu计算 换 存储空间的做法。
    2019-11-25
    11
  • GKCY1997
    异步复制可以做到1个RTT的处理时间,但是主节点如果crash,未同步的数据就没了。NSDI今年有篇《Exploiting Commutativity For Practical Fast Replication》,这篇论文很有意思,有兴趣的可以看一下。
    2019-11-25
    7
  • Jackey
    对Redis的主从复制知道一些,所以抛砖引玉说一下。Redis有两种复制方法,一种是复制指令流,Redis将写操作记录在一个环形的内存buffer中,然后将buffer中的指令异步同步到从库,从库也会告诉主库自己同步的buffer位置。当网络阻塞严重时,有可能存在没有同步的buffer被覆盖掉,这样会导致数据丢失,Redis就会采用快照同步的方式。将主库的所有key生成一个快照同步给从库,然后再继续从buffer同步。
    2019-11-25
    3
    7
  • mghio
    推荐阅读《数据密集型应用系统设计》书籍的第五章「数据复制」,是对这篇文章的一个很好的补充。
    2022-02-23
    3
  • 斜月浮云
    其实还可以向深发掘一下的。 像这一类基于镜像+操作日志的复制技术的原型原理叫做复制状态机。记得是上世纪八十年代的论文提出的。就是基于一个状态镜像和目标状态中间的操作日志(就是mysql的binlog之类)可以转化为目标状态。mysql这类数据复制技术即源于此。 这类数据复制技术的应用非常多,但把复制状态机用到极致的,就是我们常用的git和docker了。
    2020-09-10
    1
    1
  • A😇芳
    思维导图太帅了,我把所有的思维导出收集起来,没事回忆回忆,哈哈哈
    2020-07-13
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部