12 | 正确性分级(上):单机无备份有哪几种不同的一致性?
任杰
你好,我是任杰。从今天开始,我们进入到最后一个模块:分布式正确性及高可用。
在前面两个模块里,我们一起学习了金融业务,以及如何实现正确的金融系统架构。不过我们前面所讲的正确性,主要侧重点是金融业务实现的正确性。但是这些正确性还远远不够,你原来正确的代码运行在多线程或者分布式环境下,依然有可能出错。
所以,这一个模块我们主要探讨的内容是如何保证与业务无关的正确性。按照从简单到复杂的顺序,我们先来看看单机情况下会出现哪些不正确的情况。
冲突
可惜现实并不完美,程序的状态还是会被修改。如果多个人在没有良好沟通的情况下独自修改状态,这样就可能会出错,而这种错误就叫冲突。
当然了,这么定义太过于模糊,我们还需要对冲突做准确的定义。为了方便后面做分析,我们先对要研究的问题做一些假设。
我们假设机器上存在着一些共享资源,用 x 、 y 、 z 表示,对这些资源有读和写两种操作,用 R 和 W 来表示。对资源的读操作不会改变资源的状态,但是写操作会改变。
有很多人会对这些资源做读或者写的操作。每个人的操作叫作事务,我们用 T来表示。所以一个事务T里会有一系列读写操作。下面是一个时序图,展示了两个事务随着时间推移的情况:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了分布式系统中的一致性问题及解决方法,重点介绍了冲突的概念、隔离级别的分类以及冲突可串行化的概念和局限性。文章详细讨论了通过2PL解决冲突可串行化的方法,并指出了2PL的局限性。此外,还介绍了快照隔离的核心思路和实现方式,以及MVCC的存储特点和快照生成方式。总的来说,本文涵盖了冲突可串行化、2PL和快照隔离等技术特点,为读者快速了解分布式系统一致性问题提供了重要参考。文章内容深入浅出,对于理解分布式系统的正确性保障具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式金融架构课》,新⼈⾸单¥59
《分布式金融架构课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- tt快照隔离是依赖数据的版本号(我理解就是修改数据时的事务ID)来完成的。 正好乐观锁也是依赖于版本号: 在提交的时候判断版本号是否发生了变化,如果没有就提交,如果有变化就回滚。 所以可串行化快照隔离也是使用类似的机制吧。
作者回复: 是的。这两者在理论上都使用了数据的逻辑时间。
2021-01-202 - GaGi对于“脏写”的定义,我觉得文中写的不够细致,文中说“脏写指的是两个事务写了同一份资源,这样后写的事务会覆盖先写的内容”,这句话隐含了一个前提,是“前一个事务未提交时”,这样才是脏写;如果前一个事务已经提交了,那么就不是脏写了。 希望可以增加多一些细致的前提语句,可以更加好地利于读者去理解。、2022-04-2413
- LiJiao感觉这一章的题目应该是:《单机数据操作的正确性怎样保障?》。对单机上的数据进行操作时,要考虑两个问题。 第一个问题:操作到一半时发生故障,数据只改写了一半,另一半未改写。解决方法是提供「原子操作」功能,要么成功要么失败,不存在中间态。 第二个问题:「实际由多个步骤组成」的原子操作并发执行时,结果是怎样的?解决方法是给出了四种隔离级别,即给出了四个不同的规定和实现承诺。 就是,「单机上的数据操作」应该称为一致性还是正确性。。迷惑了。。掉入词眼里了。。。2021-10-121
- luke这里不仅仅指单机,还是单进程吧?事务隔离和一致性感觉是两个概念。我理解后面讲的共识算法才是解决一致性的问题,而单机这里其实就是并发问题2021-04-071
- LiJiao看完14章《多机容灾有哪几种不同的一致性?》后,对这章的内容感到困惑了。假定下面的理解是正确的:本章和13章讲的是单机事务和分布式事务的一致性,14章讲解的是多副本中的「数据一致性」。但是本章的内容看来看去,讲的都是事务的隔离级别,和一致性有啥关系? 「数据库事务的一致性」在wiki上的定义不是很具体,于是到mysql的文档中找到了innodb对ACID的理解: The database remains in a consistent state at all times — after each commit or rollback, and while transactions are in progress. If related data is being updated across multiple tables, queries see either all old values or all new values, not a mix of old and new values. // https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_acid 如果Innodb对ACID中的一致性的理解是对的,一致性的定义是:要么读到新数据,要么读到旧数据,不能两者兼有。本章好像没讲一致性 ,讲的都是事务隔离,怎么和一致性连系起来?2021-10-121
- 木头发芽这节课可以当做是Innodb引擎的事务的隔离级别的实现原理的简洁版.用的最多的还是RR级别,特别是涉及到用户之间发红包转账业务,必须在事务一开始就对用户ID的账号进行锁行,然后读取和修改余额数值.最后commit提交或回滚2021-05-18
收起评论