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

从零到百万用户

System Design Interview: An Insider's Guide · Vol 1 · Ch 1 · Alex Xu · 2020

EN →

这一章讲什么?

你现在打开的任何一个网站或 App,最早很可能只是某个人租的一台机器。这一章讲的就是:这一台机器怎么一步步长成一整个机房。它是《System Design Interview》第一卷的开场,也是全书唯一一章不设计任何具体产品——它给的是一条路线:用户从 0 涨到几百万的路上,每一次该改造哪里。

先打个比方

把网站想成一家面馆。开张时老板一个人:接单、下面、收钱、记账本全在一个铺子里。生意火了怎么办?直觉是「换个更能干的老板」,真正的解法却是分工:门口站个领位的、后厨多加几口锅、常点的几样先做好放保温柜、账本抄一份给会计、外卖单贴墙上让骑手自取、最后城东城西各开一家分店。这一章的每一步扩展,都对得上其中一件。

旧世界为什么难

一台机器扛不住时,最省事的办法是换更强的机器。这条路能走得比大多数人想的远——Stack Overflow 在 2016 年一天扛住 两亿多次请求,用的不过是九台网页服务器加四台数据库。但它有个躲不掉的问题:那台机器一坏,网站就整个没了,没有替补。所以真正的转折点不是「更强」而是「更多」——一堆普通机器,坏一台不影响别人。

核心机制:六件事,有先后

① 门口站个领位的。客人不再直接找某个服务员,而是由领位的分派给当下空着的那个。某个服务员请假了,客人照样有人接。

② 但服务员不能「记住」客人。你在 3 号服务员那点的单只记在他脑子里,他一下班你就得重新点一遍。改成把「谁点了什么」统一写到前台一个共享的本子上,任何一个服务员就都能接手你——这是能自由加人减人的总开关。

③ 账本抄几份。看账的人远比记账的人多。让「记」只写进正本、「看」都去翻抄本,正本立刻轻松下来。

④ 常点的先做好放保温柜。热门那几样不必每次从头炒,直接从柜里取——这就是缓存。图片、视频这类更干脆在各个城市都存一份,谁近取谁的。

⑤ 慢活写成单子排队。修图、发通知这种要花时间的事别让客人干等:写张单子扔进队列,后厨慢慢消化,忙不过来就多叫两个。

⑥ 实在装不下,才把账本切开。一本记不下就按客人姓氏拆成四本。这是最后一步,也是唯一一步几乎回不了头的:拆开之后,很多原本一句话就能查的东西(比如「把所有客人按第一次来的时间排序」)会突然变得很麻烦。

该怎么用它

这六步是按性价比从高到低排的:前面几步便宜、可逆、见效快,最后一步又贵又难回头。所以真正该问的从来不是「我们该上什么技术」,而是「我现在是哪一处先撑不住?」

一句话记住

把系统做大不是「买更强的机器」,而是一次次把「记住的东西」从会挡路的地方搬走:搬出服务员的脑子(无状态)、搬到抄本上(读写分离)、搬到离客人更近的地方(缓存与就近分发)、搬进队列里(异步),最后才切开(分片)。

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