1988年11月2日,一个康奈尔大学的研究生写了几千行代码,把它丢上了当时还很小众的互联网。几天之内,这台“蠕虫”感染了数千台机器——据后来广泛引用的估算,大约占了当时互联网主机的一成(具体数字至今有争议)。这个叫 Robert Morris 的年轻人,成了美国《计算机欺诈与滥用法》出台后第一个被定罪的人,被判处缓刑、社区服务和约一万美元罚款。
然后故事的走向出人意料:他后来成了 MIT 的教授,而他在 MIT 开设的分布式系统课程 6.824(如今编号 6.5840),成了整个工程师圈子口口相传的“神课”——一个当年用 bug 放倒互联网的人,后半生都在教人“如何造出摔不死的系统”。这个反转本身就值得你把这门课看一遍。
2026年的今天,这条视频比当年更值得看。AI 训练集群动辄上万张卡互联、推理服务跨区域部署、5G核心网全面云化——你今天依赖的每一个“不会坏”的服务,背后全是一门课的内容:分布式系统。而 Lecture 1 这八十分钟,就是这门课最好的入口:它不炫技,而是把一个残酷的事实掰开揉碎讲给你听——机器一定会坏,网络一定会骗你,而工程师的全部艺术,就是在这两个前提下把“可靠”造出来。
| 项目 | 内容 |
|---|---|
| 视频标题 | MIT 6.824 Distributed Systems (Spring 2020) Lecture 1: Introduction |
| 频道 | 6.824 Distributed Systems (MIT) |
| 主讲人 | Robert Morris(MIT CSAIL 教授) |
| 时长 | 约80分钟 |
| 播放量 | 数十万级(YouTube 公开页面,撰稿时未逐日核对) |
| 核心主题 | 分布式系统导论:动机、根本难点、容错三板斧与一致性的代价 |
说明:本篇为系列第2轮(编程与开发方向)。由于撰写环境的抓取限制,播放量等动态数据以频道公开页面常见量级标注,未做实时精确核对;课程结构与论文引用均以课程主页及原始论文为准。
(视频内容)Morris 开场先回答一个很多人没想过的反问:单机好好的,为什么要把它拆成一堆机器,徒增痛苦?他给出四个理由。第一是算力:单机的 CPU 上限摆在那里,想更快只能并行。第二是容错:地球物理定律保证了硬盘会坏、电源会断,想让服务在故障时依然活着,唯一办法是多备几份。第三是物理距离:把数据放在离用户近的地方,上海的请求没必要绕到弗吉尼亚。第四是隔离与安全:不同机器各自关起门来,故障和攻击都难以扩散。
(延伸分析)这四条听起来平淡,但值得记住它们的排序——容错是其中唯一“不做就会出事”的。算力可以用等待换,距离可以用延迟换,唯独“机房断电服务全灭”没有便宜的替代品。这解释了为什么整门课后来几乎全是围绕容错展开的:其余三个动机是“分布式挺好”,容错是“分布式必须”。
(视频内容)这门课最核心的概念在第一节课就被点破:partial failure(部分失败)。单机系统里,程序要么整体活着,要么整体崩了,世界是干净的。而分布式系统里最日常的状态是:一百台机器里挂了一台,其余九十九台不知道,任务还在往那台死机身上派。更糟的是,这不是边缘情况,而是常态——机器数量上去之后,“某台出问题”永远同时存在。
(延伸分析)这是整节课最值得带走的世界观转换:写单机程序时,失败是异常(exception),要处理但罕见;写分布式系统时,失败是输入(input),系统必须是“带着伤正常运转”的形态。这也是为什么 Morris 全程反复强调:分布式难,不是难在算法,而是难在默认环境就是坏的。
(视频内容)Morris 进一步指出:网络里你发出一个请求,可能有三种结局——成功送达、明确失败、以及永远没有回音。第三种才是噩梦:对方到底是死了,还是只是慢?从你的视角看,这两种状态在物理上不可区分。你等到超时再重试,可能对方其实活着,于是同一个操作被执行了两次。
(延伸分析)这一段是全课的哲学基石。分布式领域几乎所有“诡异设计”——超时重试、幂等键、去重ID、心跳机制——本质上都是在给“分不清慢和死”这个物理现实打补丁。他还在这里画了一条重要的线:这门课只对付沉默的失败(crash fault,节点坏了不说话),不对付说谎的节点(Byzantine fault,节点主动作恶)——那是另一门课、另一套数学,也是比特币那一支的起点。一个节点只会“闭嘴”和会“撒谎”,难度完全是两个次元。
(视频内容)随后 Morris 用了将近半节课,把 Google 2004 年的 MapReduce 论文当第一个案例精讲。任务很朴素:统计几TB文本里每个词出现的次数。做法是两阶段函数——Map 阶段把每个文件拆成词,吐出(词, 1)这样的中间键值对;Reduce 阶段把同一个词的计数汇总。Master 协调上千台 worker,分配任务。
精彩之处在于它的容错设计:worker 挂了怎么办?Master 把它的任务原样派给另一台机器重跑一遍。听起来粗暴,凭什么可行?因为 Map 和 Reduce 是确定性纯函数——同样的输入必然得到同样的输出,重跑不会引入不一致;中间结果存在本机磁盘上,机器死了重跑即可,不污染全局。输入输出则交给带三副本的 GFS 文件系统保底。
(延伸分析)这是第一节课里最漂亮的工程设计示范:容错能力不是加出来的,是从函数性质里“推”出来的。你敢重跑,是因为函数是纯的;你敢在本机存中间数据,是因为结果有 GFS 的副本兜底。每一层“随便”背后,都有一层“讲究”在托底。今天你写的每一个 Spark/Flink 作业,骨子里还是这套逻辑。
(视频内容)接下来讲主备复制(primary/backup)。最直观的容错是两台虚拟机实时同步,主挂了备顶上。Morris 借 VMware FT 论文讲清了这套机制的精妙:主备两侧在虚拟机管理层对每一条网络中断做同步,主侧交付中断前先记录日志发给备侧,保证两者指令级步调一致,切换时对外几乎无感。
但随后他把镜头转向丑陋的一面:如果网络把主和备隔开了怎么办?主活着,备也活着,只是互相看不见。主觉得备死了要接管,备也觉得自己该上位——于是系统里出现两个“主”,两个客户端各自拿到答案,数据从此分裂。这就是臭名昭著的 split-brain(脑裂)。Morris 展示的经典解法是引入一个第三方仲裁:想接管,先去仲裁服务器那里抢一个 test-and-set 锁,抢到才是主。但他立刻自问:仲裁服务器自己挂了呢?你把单点故障往上挪了一层,并没有消灭它。
(延伸分析)这是全课第一个真正的“思想高潮”。脑裂的本质是:在信息不完整的世界里,两个诚实的观察者会得出相反的结论。这不是工程 bug,是逻辑必然。而它逼出了本课的核心悬念——你需要的不是更强的机器,而是一种让“谁活着”变成可计算问题的数学。
(视频内容)课程的压轴预告给了 Raft——那套以“人类可读”著称的共识算法。核心动作有三个:任期(term),给时间切成编号的纪元,避免“旧主复活还自以为是主”;选举,节点发起投票,只有拿到多数派(majority)选票才能当主;日志复制,所有写操作先经主写入日志、同步给多数派才算提交。关键约束是:日志不全的节点没有资格当选——这保证了新主必然掌握全部已提交数据。
多数派的魔力在于算术:5 台机器,允许挂 2 台,因为剩下的 3 台构成多数,能选出唯一的新主;而旧主哪怕还活着,它拿不到 3 票,就只能退位。脑裂在数学上不再可能——不存在两个分区同时拥有多数。
(延伸分析)这里有一个绕不开的工程常识:多数派写入意味着每次写操作要等 3 台确认,速度天然慢于单机。多数派是用性能买安全——这正是 Morris 反复敲打的那个天平:强一致(系统对外像一台机器,好理解)与高性能(弱一致,快但难写对)之间的取舍,是分布式领域永恒的主旋律。GFS 就是活例子:三副本保平安,但允许记录重复,逼着上层应用自带去重 ID。天下没有免费的一致性。
flowchart TD
A["分布式第一课"] --> B["为什么拆开"]
A --> C["难在哪里"]
A --> D["怎么驯服"]
B --> B1["堆算力 求并行"]
B --> B2["求容错 不停服"]
B --> B3["物理距离 要靠近"]
B --> B4["隔离故障 保安心"]
C --> C1["并发无处不在"]
C --> C2["部分失败是常态"]
C --> C3["分不清慢还是死"]
D --> E["复制 同一份多存几份"]
D --> F["重执行 纯函数随便重跑"]
D --> G["投票 多数派定生死"]
E --> E1["GFS 三副本"]
E --> E2["主备复制 VM-FT"]
E2 --> E3["脑裂 两主并存"]
E3 --> G
G --> G1["Raft 任期加选举"]
F --> F1["MapReduce 任务重跑"]
D --> H["一致性是张账单"]
H --> H1["强一致 好懂但贵"]
H --> H2["弱一致 快但难写"]
对程序员:这门课最大的价值是“先破后立”——先让你承认自己写的服务在网络上就是个随时失联的哑巴,再给你工具箱。三个可以直接落地的习惯:第一,任何跨服务的调用都假设它会失败两次(一次超时、一次重试),所以写操作先想幂等键;第二,超时不是 bug 的遮羞布,每一个超时值都是一次对“慢还是死”的赌博,要有意识地标定;第三,有条件就去做课程的 Lab——Lab 1 用 Go 从零实现 MapReduce,Lab 2/3 实现并落地 Raft。据无数过来人的评价,做完这几个 Lab 的人,对“可靠”二字的理解会发生断层式变化。Morris 自己在课上说得很清楚(大意):这些东西不亲手造一遍,看论文是看不进骨头里的。
对通信行业的读者:这是个容易被忽略的事实——5G 核心网本身就是一个教科书级的分布式系统。SBA 服务化架构里,AMF 池化、NRF 服务注册发现、UDSF 统一数据存取、异地容灾双活,每一条都精确对应课上的概念:网元池化是“部分失败”的对策,主备容灾就是 primary/backup,而支撑编排与配置的云底座(etcd/ZooKeeper 这类组件)底层全是 Raft 多数派。当你排障一个“信令超时”问题时,本质上就是在解“分不清慢和死”。读这门课,等于把你日常操作的那张网,从“网元视角”升级成“系统视角”——你会发现核心网的设计者们,和 Google 的工程师们,解的是同一道题。
它不教你写更快的代码,它教你先承认机器会坏、网络会骗人——然后把“可靠”从祈祷变成一道多数派数学题。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
