13 | 分布式锁Chubby(二) :众口铄金的真相
徐文浩
你好,我是徐文浩。
上一讲里,我为你解析了两阶段提交和三阶段提交是怎么回事儿。相信你和我一样,对这两种解决方案都不太满意。虽然它们可以帮助我们实现一个分布式的事务,但同时也有着很明显的缺陷:这两个都是一个“单点”特别明显的系统,一旦作为单点的“协调者”出现网络问题或者硬件故障,整个系统就没法运行了。另一方面,如果你为了一致性,选择了两阶段提交,那么整个系统就是“同步阻塞”的,意味着整个系统的性能也会受到很大的影响。
单点故障和同步阻塞,使得所谓的“分布式”系统的优势完全没有发挥出来。所以,我们需要一个对单点没有依赖,并且不是同步阻塞的解决方案。而这个方案呢,就是我今天要给你解读的 Paxos 算法。并且在这节课里,我还会带你深入来看一下我们一般在数据库领域所说的“事务性”到底是怎么回事儿、所谓的 ACID 又是什么意思。特别是当我们处于一个分布式的环境下,又会面临什么样的挑战。
在学完这节课之后,我相信你会和我一样,搞清楚这三件事情:
数据库领域的 ACID 具体是指什么,里面的隔离性具体分成哪几种隔离等级?
分布式系统场景下,事务怎么来保障系统的“隔离性”?
Paxos 算法,究竟是怎么一回事儿?
而在搞清楚这三件事情之后,你也就掌握了足够的分布式事务和分布式一致性的基础知识,这也就意味着,你能够读懂 Chubby 的论文了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了分布式系统中的事务性和一致性问题,重点讨论了ACID属性和Paxos算法。首先解释了数据库领域的ACID属性,包括原子性、一致性、隔离性和持久性,以及不同隔离级别的含义和应用场景。随后,文章深入讨论了Paxos算法,介绍了其在分布式系统中保障一致性的重要性和实现原理。通过对ACID属性和Paxos算法的解析,读者能够深入了解分布式事务和一致性的基础知识,为理解Chubby的论文打下基础。Paxos算法中的协调过程和提案编号的讲解清晰易懂,帮助读者理解了Paxos算法的核心思想和实现细节。文章通过具体案例和问题分析,生动地展现了Paxos算法在解决分布式系统中的一致性问题上的重要作用。整体而言,本文对分布式系统中的事务性和一致性问题进行了深入剖析,为读者提供了宝贵的学习资料。文章内容深入浅出,适合对分布式系统感兴趣的读者阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》,新⼈⾸单¥59
《大数据经典论文解读》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(16)
- 最新
- 精选
- 在路上徐老师好,分布式事务的一致性(Consistency),要从数据库事务ACID的特性之一,一致性去理解,指的是不同数据不会产生矛盾。分布式共识(Consensus),分布式系统的各个部分就按何种顺序处理数据达成一致意见的过程。也就是说一致性是结果,共识是达成一致的过程。可串行化(Serializable)是数据库事务中的概念,指的是事务被顺序处理,可线性化(Linearizability)是分布式中的概念,读操作可以读到最新写入的数据。以两次读取操作为例,可以看到Serializable和Linearizability的区别,在Serializable的要求下,两次读取操作需要顺序执行,在Linearizability的要求下,则可以并发执行。 至于为什么翻译之后为什么会很接近,这是由不同的文化差异造成的,有些词换一门语言找不到对应的表达方式。比如汉语会区分父亲和母亲两边的亲戚,有叔叔、伯伯、舅舅多种称呼,而英语中只有Uncle。阿拉伯人对骆驼的命名,爱斯基摩人对雪的命名,很多都是中文不能翻译的,而大家掌握的方言也是如此,有些词没法准确的翻译成普通话。2021-10-2521
- 许灵这个隔离级别的介绍好像有问题:串行化是为了解决幻读,幻读是在一个事务中,原来没有的记录,在执行事务的过程中增加了,导致的。可这里在可重复读中描述的问题就是不可重复读,可重复读级别,会把相关的数据加锁,所以在事务完成前,应该是刷不了卡的。2021-11-1529
- 张建闯从数据库事务到状态机复制这个地方绕了好大一圈,本来没有这个疑惑,但是讲完这个完全给讲蒙圈了,看了两三遍才看明白,这两个是讲两个事情,为什么非要讲一下数据库事务呢?? 是我还是没有明白这两个的关联,还是,这个地方本来就没有什么关系呢2021-10-255
- Helios感觉没必要介绍数据库的隔离级别,和分布式共识其实没啥关系,就是名字长得像吧。2021-12-303
- Geek_789fcf针对图有几处不明白: 1、既然S1,S2,S3代表服务器,那图里的备注“S3,server 1,即ID为1的服务器”,是不是应该写成"S3,server 3,即ID为3的服务器” 2、既然S1,S2,S3都是提案者,又是接受者,那为什么S1发起的提案,图中S3没有画出来 3、提案4.2:代表第4轮,服务器2发出的提案,为什么在图中是S3发起的提案,但提案号是4.5?2021-10-2322
- Ethan New一个事务里会多次读取我们的银行卡余额。如果在这个过程中,我们在其他地方刷卡消费了,那么两次读到的余额会不同。这个隔离级别一般也不太会使用,因为这样一个事务中两个完全相同的读操作,会读到完全不同的数据,也就是会出现“幻读”。------这个问题不是幻读,是不可重复读。RR隔离级别是解决不可重复读的,mysql innodb存储引擎也能同时解决有些情况下的幻读。可序列化才能解决幻读。2021-10-2112
- Eternal1、分布式共识是一种协议,一种方法论,按照这个协议流程多个参与者可以针对某一个决议达成一直的结论; 2、分布式事务,是行为描述,是描述我多个参与者做一个决议,这个决议的内容可能相同,可能不同角色内容是不同的,但是要求做的这个动作是满足ACID的; 3、可以用raft共识协议达成分布式事务的一致,可以用paxos共识协议达成分布式事务的一致,可以用;两阶段,三阶段协议达成分布式事务的一致,可以直接用一把锁达成分布式事务的一致,关键是这个事务行为的一致的要求是是什么?是什么隔离级别?性能?容错等? 可串行化和可线性化的理解: 可串行化:理解成一个操作的互斥程度,还是单机的例子,一个文件命A和B同时来修改,不管谁先谁后,都是一个操作完成后,另外一个才开始;迁移到分布式事务的场景来看,也就是事务之间也是要支持这种串行执行的效果,因为本身可以随意改的,但是要支持这种效果 可线性化:是在操作数据的这个角色视角来看的,我写入了马上能查到,操作者不关系底层是分布式的还是单机的2023-03-19归属地:中国香港1
- Elon可线性化(Linearizability)和可串行化(Serializability)在英文环境中看着还挺像的,通过中文翻译了一次之后反而觉得还好。 串行化指在竞态条件(至少一个写操作)出现时,一次一个的执行操作。 线性化指写请求完成后,读请求能读到刚刚写入的值,使得多台机器组成的集群看起来只有一个数据副本一样。2021-10-2011
- zzzx读已提交 和 可重复读 在读的时候加锁就 可以解决一房两卖的问题2024-03-06归属地:北京
- Mr.Tree串行化就是事务是一个一个执行的,对相同的数据执行并发的读/写,写/写只能一个一个的执行,这应该也是共识算法所达成的效果,既这一轮只能有一个提案者的提案被接受执行,对于同一数据只要通过共识就算成功;可线性化是同一个客户端发起操作成功之后,对于分布式下所有副本的读/写都是基于前一个操作下的2024-01-19归属地:四川
收起评论