系统设计时不要没来由就开始估算
2024年6月11日
在一些坊间的系统设计教材中,会提到当了解完系统需求后,要进一步做系统流量的估算 (俗称 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》。
在该演讲中,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