分布式系统
这门课学什么
这门课以读论文为主线,讲怎样构建容错的分布式系统。内容包括 MapReduce、GFS、Raft、主备复制、一致性、事务和 Spanner。学员用 Go 实现 Raft 和分片键值存储。
内容摘要
这门课讲怎样构建容错的分布式系统,2020 年春季版由莫里斯(Robert Morris)主讲,课程现在的编号是 6.5840。课程以读论文为主线:几乎每讲对应一篇经典论文,学生课前读论文并回答一个问题。
课程分 3 段。第 1 段(第 1–7 讲)讲 MapReduce、RPC 和线程、GFS、主备复制,然后用 3 讲讲 Raft 共识算法。第 2 段(第 8–14 讲)讲 ZooKeeper、链式复制 CRAQ、Aurora、Frangipani、分布式事务、Spanner 和 FaRM。第 3 段(第 15–20 讲)讲 Spark、Facebook 的 Memcached、因果一致性 COPS、证书透明、比特币和 Blockstack。
作业是 4 个 Go 语言实验。实验 1 实现 MapReduce。实验 2 实现 Raft。实验 3 在 Raft 上实现容错的键值存储。实验 4 实现分片的键值存储。学生也可以做自选的期末项目,代替实验 4。课程还有 1 次期中考试和 1 次期末考试。
学完以后,你能读懂工业界的分布式系统论文,能说清一致性、复制和容错之间的取舍,能写出经得起大量故障测试的并发 Go 代码。实验难度高,Raft 实验最考验调试能力。
莫里斯讲课平实,常在白板上画时序图,并反复追问“这台机器在这里崩溃会怎样”。2020 年春季课程中途因疫情改为线上,后半段视频是远程录制的。
为什么值得学
课程的 Go 实验,特别是自己实现 Raft,是全球后端和基础设施工程师的进阶必修。
课程信息
- 学校
- 麻省理工(MIT)
- 课程号
- 6.824 / 6.5840
- 讲师
- 罗伯特·莫里斯(Robert Morris)
- 学期
- Spring 2020(视频)
- 平台
- 课程官网
- 费用
- 免费
- 难度
- 高级
- 学时
- 20 讲(Spring 2020)
- 先修
- 学过计算机系统(6.1910 或同等),会编程。
- 材料
- 视频、讲义、作业、考试、代码
- 许可证
- CC BY 3.0 US
课程大纲 · 共 20 节
大纲依据:Spring 2020 课程表(20 讲,与 YouTube 讲座视频一致)(查看原始页面 ↗)
- 1导论Introduction
说明为什么需要分布式系统,以及它在性能、容错和一致性上的挑战,并以 MapReduce 为第一个例子。
- 2RPC 与线程RPC and Threads
讲 Go 的线程、锁和通道,用网页爬虫例子演示并发,并介绍 RPC 的语义。
- 3Google 文件系统 GFSGFS
分析 GFS 的单主节点设计、分块复制和宽松的一致性模型。
- 4主备复制Primary-Backup Replication
以 VMware FT 为例讲虚拟机级的主备复制,以及主备切换时怎样避免脑裂。
- 5Go、线程与 RaftGo, Threads, and Raft
讲 Go 并发编程的常见陷阱,以及实现 Raft 时的代码结构和调试方法。
- 6容错:Raft(1)Fault Tolerance: Raft (1)
讲 Raft 的领导者选举和日志复制。
- 7容错:Raft(2)Fault Tolerance: Raft (2)
讲 Raft 的日志修复、持久化和快照,以及线性一致性的含义。
- 8ZooKeeperZookeeper
讲 ZooKeeper 怎样放松读一致性来提高读性能,以及怎样用它实现锁和配置管理。
- 9更多复制方案:CRAQMore Replication, CRAQ
讲链式复制及其变体 CRAQ,说明怎样让每个副本都能提供强一致读。
- 10云上复制数据库 AuroraCloud Replicated DB, Aurora
讲 Aurora 怎样只复制日志、用法定人数写入,以及存储层和数据库层的分离。
- 11缓存一致性:FrangipaniCache Consistency: Frangipani
讲 Frangipani 网络文件系统的锁协议、缓存一致性和崩溃恢复。
- 12分布式事务Distributed Transactions
讲两阶段锁和两阶段提交,以及它们在故障下的问题。
- 13SpannerSpanner
讲 Spanner 怎样用 TrueTime 实现跨全球数据中心的外部一致事务。
- 14乐观并发控制Optimistic Concurrency Control
以 FaRM 为例,讲在 RDMA 网络上用乐观并发控制实现高速事务。
- 15大数据:SparkBig Data: Spark
讲 Spark 的 RDD 抽象和基于血统(lineage)的故障恢复,以及它比 MapReduce 快的原因。
- 16缓存一致性:Facebook 的 MemcachedCache Consistency: Memcached at Facebook
讲 Facebook 怎样在多个数据中心部署 Memcached,以及怎样处理缓存和数据库之间的不一致。
- 17COPS 与因果一致性COPS, Causal Consistency
讲跨数据中心存储的因果一致性,以及 COPS 怎样追踪写操作之间的依赖。
- 18分叉一致性与证书透明Fork Consistency, Certificate Transparency
讲客户端怎样发现不可信服务器制造的分叉,以及证书透明日志怎样用 Merkle 树支持审计。
- 19比特币Bitcoin
讲比特币怎样用工作量证明在开放网络中对交易顺序达成一致,并防止双花。
- 20BlockstackBlockstack
讲 Blockstack 怎样在区块链上实现命名系统,以及去中心化应用的设计思路。