20|复制(二):多主复制的多主副本同时修改了怎么办?
陈现麟
该思维导图由 AI 生成,仅供参考
你好,我是陈现麟。
通过上节课的学习,我们掌握了主从复制中,同步复制和异步复制的原理与知识,这样我们就可以根据业务场景,为极客时间后端的缓存系统 Redis 、关系数据库 MySQL 和 PostgreSQL 选择合适的数据复制方式,确保存储系统的高可用了。
但是,随着极客时间业务的快速发展,我们对产品的可用性和用户体验会提出更高的要求,那么在异地建立多个数据中心就是一个不错的思路,它可以让系统容忍地区性的灾害,并且用户也可以就近接入数据中心来优化网络时延。
不过,如果我们在多个数据中心之间,依然通过主从复制来同步数据,那么所有的写请求都需要经过主副本所在的数据中心,容灾能力和网络时延的问题并没有彻底改善,这个问题如何解决呢?
其实通过多主复制的方式进行数据复制,就可以避免主从复制,不能发挥多数据中心优势的问题了,所以本节课,我们将通过多主复制的技术原理解决这个问题。
为什么需要多主复制
我们都知道,数据复制是指将同一份数据复制到多个机器上,来避免机器故障时数据丢失的问题,它主要是用于保障数据高可用的。可一旦我们有了多个数据副本,为了提供更好的容灾能力,数据的多个副本应该分布得足够远,分布在多个机房或者多个城市中。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
多主复制是解决多数据中心之间数据同步问题的有效方式。它允许每个主从复制单元处理读写请求,提高系统的容灾能力和用户体验。然而,异步复制可能导致多个主副本同时修改数据,引发冲突。文章讨论了写时解决冲突和读时解决冲突的思路,以及多主复制面临的关键问题。解决冲突的难度大,异步模式可能导致数据一致性问题,而复制拓扑结构也会影响系统的一致性。因此,在使用多主复制时,需要评估业务特点,对一致性要求高的业务需要慎重考虑。总的来说,多主复制适用于多数据中心的场景,能提高系统的容灾能力和用户体验,但也会在一定程度上降低系统的一致性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出分布式技术原理》,新⼈⾸单¥59
《深入浅出分布式技术原理》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- wenxuan通过垂直分片的方式解决多主复制可能遇到的问题: 假设主节点 1 拥有字段 A,主节点 2 拥有字段 B。在某一时刻,主节点 A 上要对记录的两个字段进行修改 (a0, b0) => (a1, b1),主节点 2 上也要对该记录进行修改 (a0, b0) => (a2, b2)。由于节点 1 需要把对 B 的修改转发到节点 2, 节点 2 需要把对 A 的修改转发到节点 1,A 和 B 最终至少面临 4 种可能的状态组合: (a1, b1), (a1, b2), (a2, b1), (a2, b2),很难确定究哪一种组合是正确的。
作者回复: 👍👍
2022-03-276 - 不吃辣👾思考题:类似多线程中对两个有约束条件的变量同时修改一样,造成约束条件失效。这里约束条件是同一行数据是原子不可分割的整体。老师,那遇到这种情况,多线程用锁或者final解决的,在垂直分片的多主复制用的什么办法解决的呢?如果用分布式锁,是不是依然退化成主从复制了。难道增加自增id维度,小id的不能覆盖大id。期待老师回复。
作者回复: 对的,多主复制的冲突是没有办法避免的,使用自增 ID 处理冲突是可以的,不过自增 ID 不能由各主节点生成,需要全局的自增 ID。
2022-04-051 - 毛哥ddia2022-03-244
- X系统的每一次新增,修改都分配唯一id并且id是有绝对时序的,复制时保证时序是不是就没问题了?2023-03-10归属地:北京
- HappyHasson多主复制 在现实中 文中提供的方案基本都不能用,还得paxos raft才有用。。2022-09-22归属地:广东
- 绘世浮夸 つ老师能不能讲讲自定义冲突目前都有哪些方法呢2022-05-12
收起评论