封底估算(Back-of-the-Envelope Estimation)

Back-of-the-envelope estimation,中文翻译为“封底估算”或“封底计算”,是一种快速估计或粗略计算的方法,通常在纸巾或白板上进行。它不涉及复杂的数学计算或模型,而是通过直观的方法来估计一个问题的解。

1. 什么是封底估算

封底估算的基本思想是,通过简单的数学公式或粗略的计算来估计问题的解,而不是进行复杂的计算。这种方法可以帮助快速获得一个问题的解的粗略估计,而不必进行详细的分析或建模。封底估算通常用于以下情况:

  1. 在早期的项目规划阶段,估计项目的成本、时间和范围。
  2. 在商业谈判中,估计交易的价值或成本。
  3. 在日常生活中,估计旅行、购物或其他个人开销。

封底估算的优点包括:

  1. 快速:封底估算可以快速获得问题的解,而无需进行复杂的计算。
  2. 简单:封底估算只需要简单的数学公式或粗略的计算,而无需复杂的数学模型。
  3. 直观:封底估算可以直观地表示问题的解,而无需详细的解释。
  4. 灵活:封底估算可以应对不同类型的问题,并且可以随时调整计算方法。

封底估算的缺点包括:

  1. 不够准确:封底估算通常不够准确,因为它牺牲了精度以换取速度。
  2. 容易被误导:封底估算容易被误导,因为它可能会忽略重要的细节或假设。
  3. 不适用于复杂问题:封底估算不适用于复杂的问题,因为它需要更复杂的数学模型和计算方法。

封底估算是一种有用的工具,可以帮助快速获得问题的解,而无需进行复杂的计算。但是,它的准确性和可靠性取决于问题的复杂程度和假设的合理性。因此,在进行封底估算时,需要谨慎选择计算方法,并确保假设的合理性。

生活中,很多生意人,在面对一门新生意的时候,能快速算出该生意的成本和营收,其实利用的也是封底估算的思想。例如通过客流量来计算一个奶茶店的日营收,从而得到在某个位置开奶茶店是否赚钱。

2. 开发工程师应该知道的操作耗时和可用性相关的数据

2.1 了解 2 的幂

面对一个比较大的系统时,尽管数据量会变得非常庞大,但相关的计算归根结底还是基本的数学运算。

为了获得正确的计算结果,了解 2 的幂所代表的数据量单位非常重要。1 字节(byte)是 8 比特(bit)。一个 ASCII 字符占用 1 字节的内存(8 比特)。

2的幂

2.2 了解操作耗时

谷歌的 Dean 博士在其 2010 年的文章中揭示了典型计算机操作的时长。随着计算机的速度越来越快,算力越来越强,有一些数字应该已经过时了。但是,通过它们,我们依然可以了解不同操作的耗时。

操作耗时

谷歌的软件工程师 Colin Scott 做了一个工具,可视化地展示 Dean 博士的数据。这个工具在展示时还考虑了时间因素。

计算机硬件访问延迟的差别

原文Numbers Every Programmer Should Know By Year

通过分析数据,我们得出如下结论:

  • 内存的速度快,而硬盘的速度慢。
  • 如果有可能,尽量避免在硬盘中查找数据。
  • 简单的压缩算法速度快。
  • 尽可能将数据压缩之后再通过因特网传输。
  • 数据中心通常位于不同的地区,在它们之间传输数据需要时间。

3. 高可用数据化后的表现

高可用性是指一个系统长时间持续运转的能力。

高可用性一般是用百分比来衡量的,100%意味着服务没有不可用的时间,大部分服务的可用性在 99%到 100%之间。

SLA(服务水平协议)是服务提供商普遍使用的一个术语。它是你(服务提供商)和你的客户之间的协议,正式规定了你提供的服务应该正常运行的时间。云服务提供商亚马逊、谷歌和微软把它们的 SLA 设定为 99.9%或以上。(说实话,我觉得 3 个 9 已经很牛逼了

正常运行时间通常是用小数点后“9”的个数来衡量的。“9”越多则代表可用性越高。

高可用对应的故障时间

4. 工程师要算的帐

4.1 案例:估算推特的QPS和存储需求

假设

  1. 推特有3亿月活用户。
  2. 50%的用户每天都使用推特。
  3. 用户平均每天发两条推文。
  4. 10%的推文包含多媒体数据。
  5. 数据要存储5年。

以下为根据上面的假设而估算出来的一些数据。

  1. 估算QPS(每秒查询量)。
    • 每日活跃用户(DAU)=300,000,000×50%=150,000,000
    • 推文QPS=150,000,000×2÷24小时÷3600秒≈3500
    • 峰值QPS=2×推文QPS≈7000
  2. 这里仅估算多媒体数据的存储量
    • 平均推文大小,tweet_id:64字节,文本:140字节,多媒体文件:1MB
    • 多媒体数据存储量=150,000,000×2×10%×1MB=30TB/天
    • 5年的多媒体数据存储量=30TB×365×5≈55PB