系统设计(架构师)指南2封底估算&新浪微博实例

2 封底估算

在系统设计面试中,有时会要求你使用 "封底估算"(back-of-the-envelope estimation)来估算系统容量或性能需求。根据谷歌高级研究员杰夫-迪恩(Jeff Dean)的说法,"封底估算是你结合思想实验和常见性能数字进行的估算,目的是让你对哪些设计能满足你的要求有一个良好的感觉"。

2.1 常用单位

2的方次 近似值 全称 简称
10 Thousand 千字节(Kilobyte) KB
20 Million 兆字节(Megabyte) MB
30 Billion 千兆字节(Gigabyte) GB
40 Trillion 太字节(Terabyte) TB
50 Quadrillion 百亿字节(Petabyte) PB

image

2.2 延迟

来自谷歌的迪恩博士揭示了 2010 年典型计算机操作的时长。随着计算机速度越来越快、功能越来越强大,有些数字已经过时。不过,这些数字仍能让我们了解不同计算机操作的快慢。

操作 时间
L1缓存 0.5ns
分支误预测 5ns
二级缓存 7ns
互斥锁定/解锁 100ns
主内存引用 100ns
Zippy压缩1K字节 10 μs
1Gbps网络发送2K字节 20 μs
内存顺序读取1MB 250μs
同一数据中心内往返 500μs
磁盘寻道 10ms
网络顺序读取1MB 10ms
磁盘顺序读取1MB 30ms
发送数据包CA(California)->Netherlands->CA 150ms

image

谷歌的一名软件工程师制作了一个工具,将Dean博士的数字可视化。该工具还考虑了时间因素。下图显示了截至 2020 年的可视化延迟数字(数字来源:参考资料 https://colin-scott.github.io/personal_website/research/interactive_latency.html )。

image

  • 内存速度快,但磁盘速度慢。
  • 尽可能避免磁盘寻道。
  • 简单的压缩算法速度快。
  • 尽可能在通过互联网发送数据前对其进行压缩。
  • 数据中心通常位于不同地区,在它们之间发送数据需要时间。

2.3 可用性数字

高可用性是指系统在理想的长时间内持续运行的能力。高可用性是以百分比来衡量的,100%表示服务没有停机时间。大多数服务介于99%和100%之间。

服务水平协议(SLA:service level agreement)是服务提供商的常用术语。这是您(服务提供商)与客户之间的协议,该协议正式规定了您的服务将提供的正常运行时间水平。云服务提供商亚马逊、谷歌和微软将其 SLA 定义为 99.9% 或以上。正常运行时间传统上以9为单位。9越多越好。

image

参考资料

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

https://colin-scott.github.io/personal_website/research/interactive_latency.html

  • Amazon Compute Service Level Agreement:

https://aws.amazon.com/compute/sla/

  • Compute Engine Service Level Agreement (SLA):

https://cloud.google.com/compute/sla

2.4 实例:估算新浪微博QPS和存储需求

请注意以下数字仅用于本练习,并非新浪微博的真实数字。

假设

  • 3亿月活跃用户。
  • 50%的用户每天使用。
  • 用户平均每天发布2条微博。
  • 10%的微博包含媒体内容。
  • 数据存储 5 年。

估计值:

每秒查询次数 (QPS Query per second) 估计值:

  • 日活跃用户(DAU Daily active users) = 3亿 * 50% = 1.5亿
  • 博文QPS = 1.5亿*2条推文/24小时/3600秒 = ~3500
  • 峰值QPS =2*QPS = ~7000

我们在此仅估算媒体存储量。

  • 平均微博大小
    • weibo_id 64 字节
    • 文本 140 字节
    • 媒体 1 MB
  • 媒体存储量 每天1.5亿 * 2 * 10% * 1 MB = 30TB
  • 5年媒体存储: 30TB * 365 * 5 = ~55PB

2.5 面试小结

封底估算的关键在于过程。解决问题比获得结果更重要。面试官可能会测试你解决问题的能力。以下是一些应遵循的技巧:

  • 圆周率和近似值。面试时很难进行复杂的数学运算。例如,"99987/ 9.1"的结果是什么?没有必要花费宝贵的时间来解决复杂的数学问题。不要求精确。使用整数和近似值对你有利。除法问题可简化如下: "100,000/10".

  • 写下你的假设。最好写下你的假设,以便日后参考。

  • 标注单位。写下 "5 "时,是指 5 KB 还是 5 MB?这可能会让你感到困惑。写下单位,因为 "5 MB "有助于消除歧义。

posted @ 2023-08-31 08:27  磁石空杯  阅读(138)  评论(0编辑  收藏  举报