系统设计时不要没来由就开始估算

2024年6月11日

💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

在一些坊间的系统设计教材中,会提到当了解完系统需求后,要进一步做系统流量的估算 (俗称 back-of-envelop estimation)。然而,强烈推荐不要没来由就做这件事

在系统设计面试中,如果你估算的东西,对关键设计的判断一点帮助都没有,跳下去做估算,很可能是白白浪费自己的时间。例如你花了五分钟估算,然后估算出来的数字在接下来的设计都没有提到怎么用,那等于白白浪费那五分钟在做没帮助的事情,这反而会是负面讯号。

当谈到估算,就不能不提 Google 的顶点工程师 Jeff Dean,他是何许人也?

Jeff Dean 是传奇软体工程师,也是 Google 唯二到达 L11 的工程师。有兴趣了解其故事的人,非常推荐纽约客杂志多年前写的《The Friendship That Made Google Huge》一文。

Jeff Dean 在 2010 年时,在史丹佛大学给的经典演讲《Building Software Systems At Google and Lessons Learne》

Building Software Systems At Google and Lessons Learne
Building Software Systems At Google and Lessons Learne

在该演讲中,Jeff Dean 问台下的听众 “给定一个问题,有许多不同的解决方案,我们要如何判断哪个是最好的?”

关于这个问题,要能够做判断,就会需要有相对应的衡量指标。更理想的状况,是在实际建造系统前,就有办法作判断,才不会花大量成本后才能判断。那么,要如何才能在建造系统前就判断呢? 这时就需要有估算的能力。

Jeff Dean 给了一个具体的例子:当今天有两种读图片的设计,一个是串行 (serial),一个是并行 (parallel),要如何快速判断哪一种设计比较好? 使用估算,Jeff Dean 在短短不到一分钟就能做出有效的判断。

如果用串行,给定从磁盘读一个 256 KB 的图片需要 10 毫秒,如果读三十张图片,就会需要约 560 毫秒。560 是来自 30 张图 x 10 ms/每张图 + 30 x 256K / 30 MB /每秒 (后面这个是网路传输时间)。

然而,如果是并行,则只需用 18 毫秒,因为 10 ms/每张图 + 256K read / 30 MB/每秒 = 18ms。

从上面的例子,可以看到当你使用估算,将能迅速判断哪种设计比较好。这种时候才该做估算。

在大致了解完估算能带来的帮助后,你可能会问所以具体在面试中,什么时候该用? 以及可以如何一步步拆解做好估算?

如果你想更深入了解,欢迎阅读 E+ 这周的主题文,我们完整讲解如何在工作上、面试中做好估算这件事,让你不会白花时间、不会做了估算反而传给面试官负面讯号。

E+ 的详细介绍可以看这边 https://www.explainthis.io/zh-hant/e-plus

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們