深入浅出分布式技术原理
陈现麟
伴鱼技术中台负责人,前小米工程师
21241 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
深入浅出分布式技术原理
15
15
1.0x
00:00/00:00
登录|注册

21|复制(三):最早的数据复制方式竟然是无主复制?

牺牲一致性
可用性优先
反熵过程
读修复
法定票数写和读
读写副本交集非空
待讨论
读请求远大于写请求
容忍一个节点失败
7个副本
写入顺序不同步
数据一致性问题
无主节点故障问题
高可用性
Sloppy Quorum
数据修复
Quorum 机制
客户端直接写入多个节点
所有节点对等
数据同步延迟
写入冲突管理复杂
提升用户体验
减少网络延迟
用户可直接访问最近的数据中心
多个主节点互为备份
扩展性受限
主节点故障影响可用性
读写分离,提高性能
数据一致性强
从节点同步数据
主节点负责写入
根据业务场景选择复制模型
深入理解数据复制
分享给同事和朋友
最佳 w 和 r 值
业务场景
缺点
优点
关键选择
实现方式
定义
缺点
优点
定义
缺点
优点
定义
推荐阅读
思考题
无主复制
多主复制
主从复制
数据复制模型总结

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

你好,我是陈现麟。
通过上节课,我们掌握了在部署多数据中心的时候,可以用多主复制的方式,让用户直接读写离自己最近的数据中心的数据,减少用户与数据中心之间的网络延迟,提升用户体验。
当我们的业务面向全球的用户时,这个优点将会变得尤为重要,比如一个北京的用户,访问北京的数据中心,网络时延为毫秒级别,但是当他访问美国的数据中心时,网络时延就是百毫秒级别了,这是影响用户体验的关键点。所以,当极客时间启动全球业务的时候,多主复制是一个可以考虑的方案。
但不论是主从复制还是多主复制,所有的写入操作都必须依赖主节点,如果主节点出现故障,则必须再选举出一个新的主节点后,才能继续提供写服务,否则就将大大影响系统的可用性。那么是否有办法可以让单节点故障时,系统的可用性完全不受到影响呢?
我们可以这样思考一下,既然系统的可用性是由主节点的故障导致的,那么我们是否能去掉主节点和从节点的角色,也就是让系统中所有节点的角色都是对等的,这样是否可以解决问题呢?
其实这就是无主复制的数据复制方式,它确实可以解决由主节点故障,导致的系统可用性问题。虽然无主复制是“复制”系列课程的最后一节,但其实它才是最早出现的数据复制方式。无主复制又称为去中心复制,只不过在关系数据库出现并且主导后,由于要确保各副本写入顺序的一致性,主从复制开始流行起来,无主复制被大家慢慢遗忘了
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

无主复制是数据库系统中重要的数据复制方式之一,它不依赖主节点,因此在主节点故障时不会导致系统不可用。然而,由于写入不依赖主节点,可能导致副本之间的写入顺序不同,从而影响数据的一致性。在实现无主复制时,关键问题包括数据读写和数据修复,通过仲裁条件和数据修复方法来保证数据的一致性和可用性。此外,文章还介绍了Sloppy Quorum,它为了系统的可用性而牺牲了数据的一致性,进一步强调了无主复制是一个可用性优先的复制模型。最后,对比了主从复制、多主复制和无主复制的优缺点和应用场景,帮助读者更好地理解数据复制,并根据业务场景做出最佳选择。

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

全部留言(5)

  • 最新
  • 精选
  • 小达
    w=6,r=2,写请求可以容忍一个节点写失败,但是这样读请求就可以容忍5个节点失败,这是不是违背了前提条件:读写都能容忍一个节点失败

    作者回复: 非常正确👍 能容忍 1 个节点失败 的条件是 能容忍 5 个节点失败的子集,所以没有违背前提条件。

    2022-03-21
    4
  • 雾都
    感谢老师写的这么有条理,这么清晰,每天像追剧一样等更新,能否一次多更新点啊

    作者回复: 哈哈,全力以赴,多谢多谢

    2022-03-21
    1
  • 飞鸿无痕
    通过这个方式,我们可以确保在数据读写时,系统只需要有任意 w 或 r 个节点可用,就能读写成功,这将大大提升系统的可用性。但是这也说明,即使系统的读写能满足仲裁条件 w + r > n ,我们依然无法保证,一定能读取到最新的值,因为新值写入的节点并不包含在这 n 个节点之中。 ---这段话没看明白,希望老师能帮解惑哈。既然w+r大于n,那新写入的值应该至少有一个能被读取到,为啥又说写入的值不一定能读取到,并且新写入的值可能并不包含在n个节点中?总副本数不是n么?

    作者回复: 这里是 Sloppy Quorum 的方式,w 和 r 的节点可能不在 n 中,比如 n 中的节点为 1、2、3,写的 w 为 4、5,读的 r 为 6、7,这个情况下,w = 2,r = 2,虽然 w + r > n,但是 w 和 r 并没有交集。

    2022-04-15
  • 李二木
    可以用Gossip实现节点间的数据同步。

    作者回复: Gossip 一般适合广播数量少,需要广播所有节点的数据,所以比较适合元数据的场景,不太适合数据明确分片并且几个副本的情况。

    2022-03-23
  • roman
    minio也是无主复制吧
    2022-06-06
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部