分布式金融架构课
任杰
eBay 支付账务系统负责人,前蚂蚁金服架构师
19876 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 30 讲
开篇词 (1讲)
分布式金融架构课
15
15
1.0x
00:00/00:00
登录|注册

14 | 正确性分级(下):多机有容灾有哪几种不同的一致性?

你好,我是任杰。这一讲我想和你聊一聊,在多机有容灾的情况下怎么保证一致性。
在前面两节课里,我们已经学习了在没有容灾的情况下,如何在单机和多机的情况下保证数据一致性。由于没有容灾,每一份数据只会出现在一个地方,因此我们可以集中对所有数据访问进行控制。
但是,我们在搭建架构的时候一定会对数据进行容灾,会将数据复制到多个地方,这时候就会出现数据访问不一致的问题。
这种情况下前面两节课的内容就不适用了,我们需要用新的理论来分析所有会出现的问题。首先让我们来看一下我们“看起来熟悉”的 CAP 的理论。

为什么不要用 CAP 来描述一致性的选择?

CAP 由三个性质组成:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。其中,分区容错性指的是网络出现了问题,把原本通过网络连接在一起的机器分成了几个独立的部分,也叫作脑裂
首先我来说说 CAP 第一个容易让人误解的问题。我们会觉得 CAP 这三个性质不能同时拥有,最多只能有两个,那么三选二之后,排列组合一共有三种选择,分别是 CA、CP 和 AP,其实这个理解是错误的。
CAP 真正的假设是当出现了脑裂后,你只能在一致性和可用性当中选择一个,从而放弃另一个。也就是说你只能选择 CP 或者 AP。在一些早期的文章中你还能看到这个常见的错误。所以 CAP 并不是像下面这幅图左边展示的三选二,而是像右边展示的那样二选一:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在分布式系统中保证一致性是一个重要的挑战。本文讨论了在多机有容灾情况下的一致性分类和解决方案。首先,CAP理论中的一致性、可用性和分区容错性并不是三选二的选择,而是在出现脑裂时需要在一致性和可用性之间做出选择。文章介绍了最终一致性、单调写一致、单调读一致、自读自写和先读后写等不同的一致性分类。其中,线性一致性被强调为分布式系统中最重要的一致性级别,要求对所有操作进行合理的时间调整,以确保所有操作能按顺序执行。此外,还介绍了严格可串行化,它要求分布式环境下的事务需要遵守线性一致性。通过讨论CAP理论和不同的一致性分类,本文帮助读者了解了在多机有容灾情况下如何保证一致性的挑战和解决方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式金融架构课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • tt
    严格可串行化,包括线性一致性和可串行化,那是不是要从这两个方面出发进行考虑。 可线性化非常依赖各个并发操作发生的时间点,所以它的实现是不是需要一个单一的时钟源,用于比较各个操作的顺序。 可串行化就是按照课程里讲的,依赖于单体的数据库的锁来实现?

    作者回复: tt你好。稍微给一点提示。在分布式环境下没有准确的物理时钟,只有准确的逻辑时钟。共识算法其实实现了一个全局唯一的逻辑时间,也就是每个消息在日志文件的ID。

    2021-01-25
    2
    2
  • 郑泽洲
    在极客上几年下来学了20多门了,正巧王磊老师的《分布式数据库30讲》有课也是讲同样的知识点。不得不说,还是王磊老师说的比较清楚: 1. 举了小明和小红发朋友圈这样生动的例子,比干啃理论效果要好点。 2. 五个一致性讲解排列地好,是层层递进的关系,是路线图。 3. 极客时间的典型学习场景是什么?是996的职场人士利用有限业务时间的学习。建立他们头脑中大场景和路线图,比深挖某个知识点要更重要,通俗地说,就是给张地图,扫清迷雾,引起兴趣,至于某个点上有没有深挖三尺,显示老师深厚功力,我觉得只能是第二重要,感兴趣的学生自己会去深挖的。 就事论事。任杰老师这课的领域驱动设计和时序数据库等还是非常值得一读的。感谢极客时间各个老师的努力。希望学习能更生动有效。
    2021-12-26
    4
  • 感觉老是对于可串行化和可线性的概念没有说得特别清楚。 可线性化与可串行化,两者可以重叠 * 可线性化:让分布式系统看起来只有一个数据副本,所有的操作都是原子的 * 可串行化:事物虽然在并发运行,但是结果单串行单独运行一样
    2021-03-08
    2
  • 听风
    依赖一个统一的逻辑时钟,才能做到了可串行化。具体实现的话,比如分布式锁都是可能的实现手段
    2021-02-26
  • webmin
    分布式环境下的严格可串行化,需要所有节点保持无间隙单调递增操作序号,各节点间通过消息广播同步操作,每个消息中包含操作序号,例如:A节点当前完成消息序号为14,这时收到序号16的消息,那么在回复16消息之前必须等到消息15。
    2021-01-26
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部