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

19|复制(一):主从复制从副本的数据可以读吗?

异步复制的从副本:可能是旧数据
同步复制的从副本:最新数据
主副本:最新数据
副本数量与机器数量解绑
提升写入性能和可用性
分片与主从复制组合
异步:AP 模型(可用性优先)
同步:CP 模型(一致性优先)
异步:不等待从副本确认
同步:等待从副本确认
从副本接收读请求
主副本接收写请求
所有副本平等
多个主副本
多个从副本
一个主副本
持续复制变化
硬件成本增长
否定答案
通过冗余保证服务
增加备用资源
消除故障原因
从副本的数据可以读吗?
小粒度复制在分布式系统中的流行
同步复制与异步复制的权衡
主从复制、多主复制、无主复制
数据高可用性通过复制实现
小粒度复制
影响
同步复制 vs 异步复制
工作流程
无主复制
多主复制
主从复制
2. 数据复制成本?
1. 机器永远可用?
接受故障可能性
避免故障出现
思考题
总结
主从复制的粒度
主从复制
数据复制方案
数据复制的子问题
高可用性的思路
数据复制与高可用性

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

你好,我是陈现麟。
通过学习“分片”的内容,我们使用分片技术,让数据按一定的策略分布到多台机器上,解决了极客时间用户量快速增长,导致存储或处理的用户数据量超过单台机器限制的问题。
但是,我们还不能高兴得太早,如果现在有一台提供数据服务的机器,由于宕机、网络不通等原因不可用了,那这一台机器上的所有数据分片就都不能被访问,这对于极客时间要求 7 * 24 小时提供服务的系统来说是不能接受的,而这就是我们工作中经常会涉及的高可用问题的场景。
那么从这节课开始,我们将一起花三节课的时间来解决这个问题。这一节课,我们先讨论让存储服务高可用的思路,接着讨论具体的解决方法,即数据复制的三种方案,最后学习第一种主从复制的基本原理,另外两种数据复制的方案在后面的两节课程中我们再来讨论。

如何让存储服务高可用

通过分析上文提到的场景,我们可以迅速锁定这是存储服务高可用的问题,解决高可用问题通常有两个思路:
第一种思路是避免故障出现。我们通过深入细节,一个一个去消除可能导致故障的原因,从而避免故障的出现,比如停电会导致宕机,那么我们就增加备用电源。但是这样,我们会遇到两个无法确定的问题:
我们可能无法穷尽所有的可能性,如果一个意料之外的问题出现了,故障就会发生。
我们虽然知道某些故障的原因,但是无法控制,比如机房会因为海啸、台风等自然不可抗力原因而宕机,在一定成本范围内,我们没有好的办法来防范。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

主从复制是一种常见的数据复制方案,适用于缓存系统、关系数据库和非关系数据库等。文章首先介绍了存储服务高可用的问题,提出了避免故障和冗余的思路。然后讨论了数据复制的三种方案,指出数据一致性问题是分布式存储的核心问题。接着详细介绍了主从复制的工作流程,比喻为主人带着一堆仆从,主人接收外部信息并分享给仆从。主从复制是解决高可用问题的重要手段,对于读者了解数据复制方案和高可用性解决方案具有重要参考价值。文章还讨论了同步复制和异步复制的工作流程,以及它们对系统可用性的设计的影响。此外,还介绍了将主从复制的粒度变小一点的方法,即水平分片和主从复制的组合方式,以及其带来的优点。最后,总结了主从复制的工作流程和同步复制与异步复制的优缺点,以及混合使用方式。整体而言,本文深入浅出地介绍了主从复制的相关概念和技术特点,对于读者快速了解主从复制的工作原理和应用场景具有重要参考价值。

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

全部留言(4)

  • 最新
  • 精选
  • ple
    细粒度方案中,【不论集群的机器的数量如何增加,副本的数量都不会改变,这样我们就可以通过增加机器,来提升整个系统整体的读写性能。】 ,这句应该是数据量持续增加的话 可以通过加机器,而不是加副本数量,提升读写性能么?

    作者回复: 你的描述非常正确👍

    2022-04-19
    6
  • 小达
    副本的数据读到的可能是旧数据,如果场景不要求数据必须是最新的就可以读。老师,是这样吗

    作者回复: 是的👍

    2022-03-17
    3
  • peter
    请教老师几个问题啊: Q1:异步复制从从副本读取时的版本号怎么实现? 文中提到,在异步复制的场景中,如果要通过从副本读取数据,一种方案是在读数据的时候给定一个版本号。请问这个版本号怎么实现?以MySQL为例,是每一个字段加版本号吗?好像不行。那是给每一行加版本号?如果是每一行加版本号,数据库中会存在多行不同版本号的数据吗?(对于一行数据,只要一个字段变化,就增加一行,用新的版本号标识) Q2:多副本节点时,需要一个独立的调度器吗? 有主副本和多个从副本,可以从任意一个节点读取数据,那么,对于一次读请求,怎么决定从哪个节点读取数据?需要一个独立于这些主、从副本节点的调度器吗?另外,对于细粒度副本方案,更为复杂,也需要一个独立的调度器吗? Q3:细粒度方案中,新数据会创建新数据块并增加机器吗? 文中的示例中,数据集为4*128M,占满了四台机器。那么,此时有新的数据后,怎么处理?因为机器已经占满,需要增加机器;其次,创建一个新的128M数据块,将此数据块存到新的机器上。是这样吗? (文中的例子,副本数为3,至少增加3台机器)。

    作者回复: Q1:这个一般是存储引擎内部实现和使用的,对外不暴露出来,不是存储引擎的开发者,一般不会涉及到。另外数据按版本存储和查询,在事务的隔离性中会讨论。 Q2:从主副本读数据或从副本读取数据,这个很多系统的实现是由工程师在客户端来指定,比如 mongodb。 Q3:课程中例子里,一个节点可以存储 3 个 128 M的分片,数据为 3 副本,所以如果增加 128M 的空间,增加一个节点就可以了,数据的分布在集群中自动一下,让 3 个副本分布到不同的节点上。

    2022-03-16
    2
  • 建锋
    无论是同步复制与异步复制,数据查询时,都会存在时延问题。对于写完立刻读的场景,都有可能读到的数据不一致。数据实时性要求高的场景可以指定主库读
    2022-06-05
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部