名校公开课 / 麻省理工 / 经典

分布式系统

Distributed Systems6.824 / 6.5840麻省理工Spring 2020(视频)免费
MapReduceRaft 共识复制与容错一致性模型分布式事务

这门课学什么

这门课以读论文为主线,讲怎样构建容错的分布式系统。内容包括 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. 1
    导论Introduction

    说明为什么需要分布式系统,以及它在性能、容错和一致性上的挑战,并以 MapReduce 为第一个例子。

  2. 2
    RPC 与线程RPC and Threads

    讲 Go 的线程、锁和通道,用网页爬虫例子演示并发,并介绍 RPC 的语义。

  3. 3
    Google 文件系统 GFSGFS

    分析 GFS 的单主节点设计、分块复制和宽松的一致性模型。

  4. 4
    主备复制Primary-Backup Replication

    以 VMware FT 为例讲虚拟机级的主备复制,以及主备切换时怎样避免脑裂。

  5. 5
    Go、线程与 RaftGo, Threads, and Raft

    讲 Go 并发编程的常见陷阱,以及实现 Raft 时的代码结构和调试方法。

  6. 6
    容错:Raft(1)Fault Tolerance: Raft (1)

    讲 Raft 的领导者选举和日志复制。

  7. 7
    容错:Raft(2)Fault Tolerance: Raft (2)

    讲 Raft 的日志修复、持久化和快照,以及线性一致性的含义。

  8. 8
    ZooKeeperZookeeper

    讲 ZooKeeper 怎样放松读一致性来提高读性能,以及怎样用它实现锁和配置管理。

  9. 9
    更多复制方案:CRAQMore Replication, CRAQ

    讲链式复制及其变体 CRAQ,说明怎样让每个副本都能提供强一致读。

  10. 10
    云上复制数据库 AuroraCloud Replicated DB, Aurora

    讲 Aurora 怎样只复制日志、用法定人数写入,以及存储层和数据库层的分离。

  11. 11
    缓存一致性:FrangipaniCache Consistency: Frangipani

    讲 Frangipani 网络文件系统的锁协议、缓存一致性和崩溃恢复。

  12. 12
    分布式事务Distributed Transactions

    讲两阶段锁和两阶段提交,以及它们在故障下的问题。

  13. 13
    SpannerSpanner

    讲 Spanner 怎样用 TrueTime 实现跨全球数据中心的外部一致事务。

  14. 14
    乐观并发控制Optimistic Concurrency Control

    以 FaRM 为例,讲在 RDMA 网络上用乐观并发控制实现高速事务。

  15. 15
    大数据:SparkBig Data: Spark

    讲 Spark 的 RDD 抽象和基于血统(lineage)的故障恢复,以及它比 MapReduce 快的原因。

  16. 16
    缓存一致性:Facebook 的 MemcachedCache Consistency: Memcached at Facebook

    讲 Facebook 怎样在多个数据中心部署 Memcached,以及怎样处理缓存和数据库之间的不一致。

  17. 17
    COPS 与因果一致性COPS, Causal Consistency

    讲跨数据中心存储的因果一致性,以及 COPS 怎样追踪写操作之间的依赖。

  18. 18
    分叉一致性与证书透明Fork Consistency, Certificate Transparency

    讲客户端怎样发现不可信服务器制造的分叉,以及证书透明日志怎样用 Merkle 树支持审计。

  19. 19
    比特币Bitcoin

    讲比特币怎样用工作量证明在开放网络中对交易顺序达成一致,并防止双花。

  20. 20
    BlockstackBlockstack

    讲 Blockstack 怎样在区块链上实现命名系统,以及去中心化应用的设计思路。

麻省理工的其他经典课