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

粗略估算

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

EN →

这一章讲什么?

搬家前,你不会挨个称行李的重量,但你一定会先看一眼:这些东西,一辆小面包车装得下吗?看一眼就知道「装不下,得叫货车」——这个判断只花三秒,却决定了你今天要打哪个电话。这一章讲的就是工程师版的「看一眼」:在动手做任何系统之前,先用几个粗糙的数字判断出,这活儿到底是一辆小面包车的事,还是要叫车队。

先说个怪事

这一章从头到尾没有一个精确答案。它算出来的每个数字都是拍的、圆整过的、四舍五入到「大概」的。可它恰恰是全书最有用的一章之一。因为决定架构长什么样的从来不是「3512 还是 4108」,而是「三千还是三百万」——差一千倍的两个世界,完全不该用同一套做法。

旧世界为什么难

不做这一步的团队,会稳定地栽进两种坑,方向正好相反。

一种是高估。产品还没几个用户,团队已经按「以后会很大」的假想上了一整套复杂设施。结果是大半年时间花在维护这套设施上,产品本身几乎没动过。

另一种是低估。方案讲得挺漂亮,上线才发现要存的东西根本不是「买块硬盘」的量级,而是要塞满一整个仓库;等到发现时,改法就只剩下最贵最痛的那种了。

两种坑的共同点是:没人在开工前花三分钟,把大概的数量写在纸上。

核心机制:三件小事

① 先在脑子里备几把「标尺」。就像厨师不用量杯也知道「一撮盐大概多少」,工程师得先记住几个常识性的量:从记忆里取一样东西是「一眨眼」,走到楼下车库取是「一趟」,寄到地球另一边再寄回来是「一次跨国快递」。这三件事之间差着极大的倍数——记住这个差距,很多设计不用算就能一眼否掉。

② 把假设写下来。估算真正的产出不是那个数字,而是那串假设:有多少人在用、每人每天用几次、每次留下多大的东西、要留多久。写下来,别人才能指着其中一条说「这条我不同意」——于是讨论从「你猜我猜」变成了「我们改这一条再算一遍」。

③ 只求量级,大胆取整。把复杂的数一律圆成整数再算,算完只看结果落在哪一档。这不是偷懒,是因为你的输入本来就是拍的——用精确的算法去处理拍脑袋的输入,得到的只是看起来很精确的错误。

该怎么用它

还有一个最容易被跳过的动作:算完平均,一定要再问一句「最挤的那一刻是多少」。一家饭馆按全天平均客流配座位,中午十二点一定会崩。真实世界里,最挤那一刻常常是平均的几十倍,而不是「多一点点」。

诚实说一句代价:这套办法只能告诉你在哪个数量级,它永远回答不了「到底能不能扛住」——那得靠真的压一遍。

一句话记住

估算不是为了算对,是为了在三分钟内排除掉那些一眼就不成立的方案。写下假设、大胆取整、只看量级,再补上一问:最挤的那一刻呢?

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