首页 › AI System Design › 第2章:粗略估算

第2章:粗略估算

简介​

在系统设计面试中,粗略估算是一项至关重要的技能。它通过快速、粗略的计算来评估系统的容量或性能。据谷歌资深研究员杰夫·迪恩所言,这类估算有助于借助思想实验和常见的性能基准,判断设计方案是否能够满足需求。​

本章涵盖构建可扩展性和估算能力所需的关键概念、方法论及示例。​

​

​

第1节:关键概念​

Power of Two​

从2的幂次方来理解数据量是基础:​

​

飞书文档 - 图片

​

这些知识有助于进行准确的存储与带宽计算。​

​

​

Latency Numbers Every Programmer Should Know​

延迟数值反映了计算系统中各项操作所耗费的时间。这些数据有助于洞察相对性能:​

​

#IRAtuTsyoyUA text { white-space: pre; }#IRAtuTsyoyUA .fb0 { stroke: var(--N900-FG, 0.15); }#IRAtuTsyoyUA .fb0 {stroke: rgba(31,35,41, 0.15)}#IRAtuTsyoyUA .fx0 { stroke-miterlimit: 10; }#IRAtuTsyoyUA .fx0 {stroke-miterlimit: 10}#IRAtuTsyoyUA .fa1 { fill: rgb(187, 191, 196); }#IRAtuTsyoyUA .fa1 {fill: rgb(187, 191, 196)}#IRAtuTsyoyUA .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#IRAtuTsyoyUA .fx1 {font-style: normal}#IRAtuTsyoyUA .fx2 { text-anchor: middle; }#IRAtuTsyoyUA .fx2 {text-anchor: middle}#IRAtuTsyoyUA .fx3 { dominant-baseline: central; }#IRAtuTsyoyUA .fx3 {dominant-baseline: central}#IRAtuTsyoyUA .fx4 { stroke: none; }#IRAtuTsyoyUA .fx4 {stroke: none}#IRAtuTsyoyUA .fc0 { fill: var(--text-caption); }#IRAtuTsyoyUA .fc0 {fill: #646a73}#IRAtuTsyoyUA .fa2 { fill: var(--text-link-disabled); }#IRAtuTsyoyUA .fa2 {fill: rgb(187, 191, 196)}#IRAtuTsyoyUA .fa3 { fill: rgb(225, 234, 255); }#IRAtuTsyoyUA .fa3 {fill: rgb(225, 234, 255)}#IRAtuTsyoyUA .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#IRAtuTsyoyUA .fx5 {font-style: normal}#IRAtuTsyoyUA .fx6 { text-anchor: start; }#IRAtuTsyoyUA .fx6 {text-anchor: start}#IRAtuTsyoyUA .fx7 { dominant-baseline: alphabetic; }#IRAtuTsyoyUA .fx7 {dominant-baseline: alphabetic}#IRAtuTsyoyUA .fc1 { fill: rgb(0, 0, 0); }#IRAtuTsyoyUA .fc1 {fill: rgb(0, 0, 0)}#IRAtuTsyoyUA .fb1 { fill: var(--N900-FG, 0.15); }#IRAtuTsyoyUA .fb1 {fill: rgba(31,35,41, 0.15)}#IRAtuTsyoyUA .fb2 { fill: rgb(209, 217, 224); }#IRAtuTsyoyUA .fb2 {fill: rgb(209, 217, 224)}#IRAtuTsyoyUA .fa4 { fill: var(--bg-body); }#IRAtuTsyoyUA .fa4 {fill: #fff}AB12345678操作L1缓存访问L2缓存访问主内存访问SSD随机读取HDD随机寻道数据中心往返时间跨区域数据中心延迟(2020年)0.5纳秒7纳秒100纳秒150微秒10毫秒500微秒150毫秒

​

关键洞察:​

•

内存速度快,磁盘速度慢。​

•

尽可能避免磁盘寻道。​

•

在通过互联网传输数据前进行压缩,以节省带宽。​

​

​

Availability Numbers​

高可用性(HA)确保停机时间尽可能短。可用性通常用九个9:​

•

99%(两个9):每年约3.65天的停机时间​

•

99.9%(三个九):每年约8.8小时的停机时间​

•

99.99%(四个九):每年约52分钟的停机时间​

•

99.999%(五个九):每年约5.3分钟的停机时间​

•

99.9999%(六九):每年约31.56秒的停机时间​

亚马逊、谷歌、微软等云服务商的目标服务等级协议(SLA)为99.9%或更高.​

​

​

第2节:示例估算——Twitter的QPS与存储需求​

Assumptions​

•

月活跃用户数(MAU):3亿。​

•

日活跃用户数(DAU):50%。​

•

人均每日发帖数: 2.​

•

10%的推文包含媒体。​

•

数据保留:5年。​

Estimations​

每秒查询量(QPS):​

◦

DAU = ( 300M x 50% = 150M )​

◦

Tweets QPS = ( 150M x 2 tweets / 24 hour / 3600 seconds = ~3500 )​

◦

峰值QPS = ( 2 x 3500 = 约7000 )​

媒体存储:​

◦

Tweet大小构成:​

▪

tweet_id: 64 bytes​

​

​

第3节:有效估算的技巧​

Rounding and Approximation​

精度并非关键;应聚焦于流程。可采用四舍五入的近似值简化复杂计算。例如:​

•

( 99987 / 9.1 ) 可近似为 ( 100,000 / 10 = 10,000 )。​

Write Down Assumptions​

请清晰记录各项假设,以备日后参考。​

Label Units​

这是一个名为“system-design-notes/01. Scaling at main · liquidslr/system-design-notes”的GitHub仓库页面。上下文。​

Common Estimation Scenarios​

•

QPS(每秒查询数):衡量流量强度。​

•

峰值QPS:考虑流量高峰。​

•

存储需求:估算总数据量需求。​

•

缓存需求:评估缓存所需的内存容量。​

•

服务器数量:根据工作负载计算硬件需求。​