MIT6.824 分布式系统课程中文翻译

MIT6.824 分布式系统课程中文翻译

底线是至少一周两更,至少更新到 Lecture 12

简介

一直在断断续续的学习 mit 6.824 分布式系统这门课程。分布式系统是现在计算机软件系统中不可避免的一种架构,了解分布式系统对于构建任何大型分布式应用,对于理解分布式程序的运行,对于优化分布式程序的运行环境都有一定的帮助。 mit6.824 这门课程可以说是明星课程了,主讲老师是 Robert Morris,这个看起来平…

12.5 总结

这就是两阶段提交,它实现了原子提交。两阶段提交在大量的将数据分割在多个服务器上的分片数据库或者存储系统中都有使用。两阶段提交可以支持读写多条记录,一些更特殊的存储系统不允许你在多条记录上支持事务。对于这些不支持事务中包含多条数据的系统,你就不需要两阶段提交。但是如果你需要在事务中支持多条数据,并且你将数据分片在多台服务…

12.4 故障恢复(Crash Recovery)

现在,我们需要在脑中设想各种可能发生的错误,并确认这里的两阶段提交协议是否仍然可以提供 All-or-Noting 的原子特性。如果不能的话,我们该如何调整或者扩展协议? 第一个我想考虑的错误是故障重启。我的意思是类似于断电,服务器会突然中断执行,当电力恢复之后,作为事务处理系统的一部分,服务器会运行一些恢复软件。这里实际上…

12.3 两阶段提交(Two-Phase Commit)

我们下一个话题更具体一点:在一个分布式环境中,数据被分割在多台机器上,如何构建数据库或存储系统以支持事务。所以这个话题是,如何构建分布式事务(Distributed Transaction)。具体来说,如何应付错误,甚至是由多台机器中的一台引起的部分错误。这种部分错误在分布式系统中很常见。所以,在分布式事务之外,我们也…

12.2 并发控制(Concurrency Control)

第一个要介绍的是并发控制(Concurrency Control)。在并发控制中,主要有两种策略,在这门课程中我都会介绍。 第一种主要策略是悲观并发控制(Pessimistic Concurrency Control)。 这里通常涉及到锁,我们在实验中的 Go 语言里面已经用过锁了。实际上,数据库的事务处理系统也会使用锁。这里…

12.1 分布式事务初探(Distributed Transaction)

今天讨论的内容是分布式事务。 分布式事务主要有两部分组成。第一个是并发控制(Concurrency Control)第二个是原子提交(Atomic Commit)。 之所以提及分布式事务,是因为对于拥有大量数据的人来说,他们通常会将数据进行分割或者分片到许多不同的服务器上。假设你运行了一个银行,你一半用户的账户在一个服务器…

11.8 Frangipani 总结

前面我介绍了这些主要的内容: Petal 是什么 缓存一致性 分布式事务 分布式故障恢复 论文还讨论了一下性能,但是过了 20 年之后的今天,很难理解这些性能数据。因为作者在一个与今天非常不同的硬件,非常不同的环境测试的性能。笼统来说,作者展示的性能数据表明,随着越来越多的 Frangipani 工作站加入到系统中,系统并没有明显变慢。即…

11.7 故障恢复(Crash Recovery)

接下来,我们讨论一下,当工作站持有锁,并且故障了会发生什么。 这里的场景是,当工作站需要重命名文件或者创建一个文件时,首先它会获得所有需要修改数据的锁,之后修改自身的缓存来体现改动。但是后来工作站在向 Petal 写入数据的过程中故障了。工作站可能在很多个位置发生故障,但是由于前面介绍过的工作流程,Frangipani 总是会…

11.6 Frangipani Log

下一个有意思的事情是故障恢复。 我们需要能正确应对这种场景:一个工作站持有锁,并且在一个复杂操作的过程中崩溃了。比如说一个工作站在创建文件,或者删除文件时,它首先获取了大量了锁,然后会更新大量的数据,在其向 Petal 回写数据的过程中,一部分数据写入到了 Petal,还有一部分还没写入,这时工作站崩溃了,并且锁也没有释放(因…

11.5 原子性(Atomicity)

下一个挑战是确保原子性。当我做了一个复杂的操作,比如说创建一个文件,这里涉及到标识一个新的 inode、初始化一个 inode(inode 是用来描述文件的一小份数据)、为文件分配空间、在目录中为新文件增加一个新的名字,这里有很多步骤,很多数据都需要更新。我们不想任何人看到任何中间的状态,我们希望其他的工作站要么发现文件不存…

11.4 缓存一致性(Cache Coherence)

工作站和锁服务器之间的缓存一致协议协议包含了 4 种不同的消息。本质上你可以认为它们就是一些单向的网络消息。 首先是 Request 消息,从工作站发给锁服务器。Request 消息会说:hey 锁服务器,我想获取这个锁。 如果从锁服务器的 lock 表单中发现锁已经被其他人持有了,那锁服务器不能立即交出锁。但是一旦锁被释放了,锁服务器会… https://www.zhihu.com/column/c_1273718607160393728?utm_source=wechat_session&utm_medium=social&utm_oi=62521130090496