专业书籍精读 · System Design Interview 卷一 · 第 15 章

设计 Google Drive

System Design Interview Vol 1 · Ch 15 · Alex Xu · 2020

EN →

这一章讲什么?

你在电脑上改了一个文件,手机上一打开就是新的。这一章问:把这件事做给几千万人用,背后要建些什么?答案有点反直觉——存文件反而是最容易的一步,难的是让你那五台设备对「现在到底哪一版才算数」始终说法一致。

先说个怪事

你在一份两百页的文档里改了一个字,网盘并没有把这两百页重传一遍。它只补了改动落在的那一小段——在它眼里,你的文件早就被剪成了一叠小卡片,你动了哪张,它就补哪张。

旧世界为什么难

早年的做法是「整份重传」。文件小的时候没人在意,可一旦你天天改一个几百兆的设计稿、还开着手机热点,代价立刻变得荒唐:改一个字,传半小时。更麻烦的是设备从不同时在线——笔记本改完就合上,平板三天后才开机,中间两边可能各改过一次。系统必须替你把这笔糊涂账理清楚。

核心机制:三个直觉

① 把文件剪成小卡片。上传前先切成大小差不多的小块,每块单独压缩、加密、存进仓库。以后改一处,只补那一张卡片。

② 货和账分开放。网盘其实是两套系统:一套放「货」(那些小块),一套记「账」(谁有哪些文件、第几版、由哪些块拼成)。你看到的目录、文件名、历史版本全在账本里。货那半边早就被云仓库解决了,剩下的难题几乎全在账上。

③ 谁先记上账,谁就算数。两台设备离线各改一次,最后同时上线——账本只认先到的那一版;后到的不会被悄悄盖掉,而是另存一份「冲突副本」摆在你面前,让你自己决定留哪个。

该怎么选

所有取舍最后都指向同一个问题:卡片切多大。切得太碎,账本上的条目会暴涨,光记账就把系统压垮;切得太大,改一个字又要重传一大坨。业界的答案落在几兆这个量级——大到账记得过来,小到重传不心疼。

代价很诚实:省下来的是带宽,赔进去的是账本——文件一多,慢的往往不是传输,而是「算清楚这次到底该传哪几块」。

一句话记住

网盘不是存储系统,是同步系统:文件切成块丢给云仓库,真功夫全在那本记着「谁有什么、第几版、由哪些块拼成」的账上。两边打架时,它选择让你看见冲突,而不是替你做决定。

想进到具体机制、记号和示意图? → 切到精读版