使用Back-Of-The-Envelope-Calculations方法选择最佳的设计方案

对于一个给定的问题,你怎么判断哪个设计是最优的呢?举个例子,比如现在给你问题,需要生成一个包含30张缩略图的搜索结果页面,你会怎么做?按顺序一个一个读取图片?或者是并行读取?你会使用缓存吗?你会怎么决定?

如果你可以利用“power of the multiverse”,你可以尝试每种设计,最终确认哪个设计是最优的。但是这是不可能的,对吧?

另外一个选择是你可以考虑各种算法替代的顺序(order of various algorithm)。作为Computational Thinking黄金时代的先驱者,Google绝对会这么做,但是还可能会怎么做呢?

使用 Back-Of-The-Envelope 方法评估不同的设计

作为Google基础建设学院院长(该学院在Google的很多关键系统起到了重要的作用,包含:广告系统、Big Table、搜索、MapReduce、ProtocolBuffers),Jeff Dean 倡导使用 back-of-the-envelope 方法来评估不同的设计。他在 Stanford video presentation 该演讲里面讲述了他的完整的想法。

Back-of-the-envelope 估算法是使用思想实验和常见的性能数字组合而成的估算法,以便更好地估算哪些设计可以满足你的需求。Dr. Dean 认为有一个重要的技能是每个软件工程师都必须掌握的,那就是用 Back-of-the-envelope 估算法评估每个替代系统的性能,而不是构建好系统再去测试性能。

他在视频中给出了一个非常好的例子,但是首先……

你得知道这些数字

要评估备选设计方案,首先你得对这些典型的操作的耗时有个基本了解。Dr. Dean 给出了下面的列表:

  • L1 cache 的引用耗时 0.5ns

  • 分支的错误预判的耗时是 5ns

  • L2 cache 的引用耗时 0.7ns

  • 互斥的锁与解锁耗时 100ns

  • Main cache 的引用耗时 100ns

  • 使用Zippy压缩 1K bytes 数据耗时 10000ns

  • 使用1G 带宽的网络发送 2K bytes 数据耗时 20000ns

  • 从 memory 串行读取1MB 的数据耗时 250000ns

  • 从同一个数据中心往返耗时 500000ns

  • 磁盘寻道耗时 10,000,000ns

  • 串行从网络读取 1MB 数据耗时 10,000,000ns

  • 串行从磁盘读取 1MB 数据耗时 30,000,000ns

  • 从 CA到 Netherlands 再到CA,传输网络包 耗时 150,000,000ns

以下是需要注意的事项:

  • 注意不同选项的性能表现的量级差异

  • 各个数据中心都是相隔比较远的,因此传输数据耗时很久

  • 相对来说,内存读取很快,磁盘比较慢

  • 通过使用廉价的压缩算法,可以节省很多的网络带宽(2倍)。

  • 写数据的代价是读数据的40倍

  • 全局共享数据的代价是昂贵的。这是分布式系统的基础决定的。大量共享对象的写入操作带来的锁竞争会导致性能下降,transaction变得序列化而且缓慢。

  • 支持动态扩展写操作的架构

  • 对较低的写操作的竞争的优化

  • 大范围的优化。尽量让写操作并行处理。

例子:生成一个包含30张缩略图的搜索结果页面

这个是视频里面提及的例子。两种设计方案被用在了设计思想实验。

第一种设计:串行

  • 串行读取图片。磁盘寻道。读取一张256K的图片接着再去读取下一张。

  • 性能:30 次寻道 * 10ms/seek + 30 * 256K / 30MB/s = 560ms

第二种设计:并行

  • 并行读的问题

  • 性能:10 ms/seek + 256K read / 30MB/s = 18ms

  • 磁盘寻道的速度都不一样,所以合理估算为 30 - 60 ms

哪一种设计更好?取决于你的需求,但是使用 back-of-the-envelope 估算法你可以很快的这两种方案而不是真的去构建系统。

现在,你有了一个框架,你可以问你自己其他的设计问题,并且比较不同的设计变化:

  • 有必要做缩略图的缓存吗?

  • 应该在一个entry里缓存好一整套的图片吗?

  • 有必要对缩略图进行预计算吗?

你必须了解你的设备的性能,才能让你的估算更贴近现实。如果过程有一个未知的变量,那么你可以快速的原型化那个变量以解决该问题。比如,你要知道缓存是否是一个好的设计,你必须了解你的缓存写入耗时是多久。

学习总结

  • 通过 back-of-the-envelope 估算法你可以大致了解不同设计的变化

  • 当设计你的系统的时候,你应该在大脑里不断地进行这些计算。

  • 对于你的系统的模块,必须了解上文提及的 back-of-the-envelope 估算法必备的一些基本数字。了解基本的性能指标数字还不够,你还必须了解你的子系统的表现。不了解系统的运转,就不可能做好 back-of-the-envelope 估算。

  • 监控并且测量你的系统的每个部分,这样你才能从实际数据中进行不同类型的projections。

我个人非常喜欢这种方法。这种方法在 end-to-end nature 系统中更加接地气( It seems much more grounded in the end-to-end nature of a system than is common.)。The practice today is to focus on the trickeration of various algorithms, which are really a researchable and pluggable part of this larger, more holistic analysis.

原文:http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容