name: estimation-techniques description: 系统设计的快速估算。用于容量规划时估计QPS、存储、带宽或延迟。包括每个程序员都应该知道的延迟数字和常见估计模式。 allowed-tools: Read, Glob, Grep
估计技术
这个技能提供系统设计和容量规划所需的快速估算框架。
何时使用此技能
关键词: 快速估算、估计、QPS、存储计算、带宽、延迟、容量规划、规模估计
在以下情况下使用此技能:
- 估计系统容量需求
- 计算功能的存储需求
- 确定带宽需求
- 根据预期负载调整基础设施规模
- 用数字证明架构决策
- 准备系统设计面试
核心原则
估计不是关于精度,而是关于数量级。
在10倍范围内通常足以用于架构决策。目标是确定您需要:
- 1台服务器还是100台服务器
- 1 GB还是1 TB的存储
- 10毫秒还是1秒的延迟
必须知道的数字
2的幂
| 幂 | 值 | 近似值 |
|---|---|---|
| 2^10 | 1,024 | ~1千 (KB) |
| 2^20 | 1,048,576 | ~1百万 (MB) |
| 2^30 | 1,073,741,824 | ~1十亿 (GB) |
| 2^40 | 1,099,511,627,776 | ~1万亿 (TB) |
时间转换
| 单位 | 秒 | 用途 |
|---|---|---|
| 1分钟 | 60 | 短操作 |
| 1小时 | 3,600 | 批处理作业 |
| 1天 | 86,400 (~100K) | 每日聚合 |
| 1个月 | 2,592,000 (~2.5M) | 月度计算 |
| 1年 | 31,536,000 (~30M) | 年度预测 |
可用性目标
| 可用性 | 每年停机时间 | 每月停机时间 | 每日停机时间 |
|---|---|---|---|
| 99% (两个9) | 3.65天 | 7.31小时 | 14.4分钟 |
| 99.9% (三个9) | 8.76小时 | 43.8分钟 | 1.44分钟 |
| 99.99% (四个9) | 52.6分钟 | 4.38分钟 | 8.64秒 |
| 99.999% (五个9) | 5.26分钟 | 26.3秒 | 864毫秒 |
每个程序员都应该知道的延迟数字
参见完整参考: references/latency-numbers.md
快速参考:
| 操作 | 延迟 | 相对 |
|---|---|---|
| L1缓存引用 | 0.5纳秒 | 1x |
| L2缓存引用 | 7纳秒 | 14x |
| 主内存引用 | 100纳秒 | 200x |
| SSD随机读取 | 16微秒 | 32,000x |
| HDD寻道 | 2毫秒 | 4,000,000x |
| 同数据中心往返 | 0.5毫秒 | 1,000,000x |
| 从加州到荷兰往返 | 150毫秒 | 300,000,000x |
估计模式
模式1:QPS(每秒查询数)
公式
QPS = (用户数) x (每个用户每天的操作数) / (每天的秒数)
示例:类似Twitter的服务
给定:
- 3亿月活跃用户
- 50%是日活跃 = 1.5亿DAU
- 平均用户每天阅读20条推文
QPS = 1.5亿 * 20 / 86,400
= 30亿 / 100,000
= 30,000 QPS
峰值负载(通常为平均的2-3倍):
峰值QPS = 30,000 * 3 = 90,000 QPS
模式2:存储估计
公式
存储 = (项目数) x (每个项目的大小) x (复制因子) x (时间周期)
示例:照片存储服务
给定:
- 1亿用户
- 10%每天上传 = 1000万上传/天
- 平均照片大小 = 2 MB
- 保留5年数据
- 复制因子 = 3
每日存储 = 1000万 * 2 MB = 20 TB
年度存储 = 20 TB * 365 = 7.3 PB
5年存储 = 7.3 * 5 = 36.5 PB
带复制 = 36.5 * 3 = ~110 PB
模式3:带宽估计
公式
带宽 = (QPS) x (请求大小或响应大小)
示例:视频流服务
给定:
- 100万并发观众
- 平均比特率 = 5 Mbps
- 高峰时段:晚上8点 - 11点
带宽 = 100万 * 5 Mbps = 5 Tbps
带20%开销:~6 Tbps
CDN出口成本(粗略):
$0.02/GB * 6 Tbps * 3小时 * 3600秒/小时 / 8位/字节
= 巨大成本(因此Netflix建立自己的CDN)
模式4:缓存大小估计
公式
缓存大小 = (QPS) x (缓存TTL) x (响应大小) x (唯一比率)
示例:API响应缓存
给定:
- 10,000 QPS
- 缓存TTL = 5分钟 = 300秒
- 平均响应 = 10 KB
- 20%的请求是唯一的
缓存条目 = 10,000 * 300 * 0.20 = 600,000条目
缓存大小 = 600,000 * 10 KB = 6 GB
带开销(键、元数据):~10 GB
模式5:数据库规模调整
公式
数据库大小 = (行数) x (行大小) x (索引开销) x (复制)
示例:用户配置文件数据库
给定:
- 5亿用户
- 平均配置文件 = 1 KB(名称、电子邮件、设置等)
- 索引开销 = 30%
- 主节点 + 2个副本 = 3x
数据大小 = 5亿 * 1 KB = 500 GB
带索引 = 500 GB * 1.3 = 650 GB
带复制 = 650 GB * 3 = ~2 TB
热数据内存(20%):~400 GB
常见估计场景
场景1:URL缩短器
需求:
- 每月1亿新URL
- 10:1的读写比
写入:
- 1亿 / (30 * 24 * 3600) = ~40写入/秒
- 峰值:~100写入/秒
读取:
- 40 * 10 = 400读取/秒
- 峰值:~1000读取/秒
存储(5年):
- 每月1亿URL * 60个月 = 60亿URL
- 平均URL = 100字节(短) + 500字节(长) = 600字节
- 60亿 * 600字节 = 3.6 TB
- 带索引和开销:~5 TB
场景2:聊天应用
需求:
- 1000万日活跃用户
- 平均每天发送50条消息
- 平均每天接收200条消息
消息吞吐量:
- 发送:1000万 * 50 / 86,400 = ~6,000消息/秒
- 峰值:~20,000消息/秒
连接:
- 每个用户保持1-3个连接(手机、笔记本电脑、平板)
- 峰值并发:1000万 * 0.1 (10%在线) * 2 = 200万连接
存储(1年):
- 1000万用户 * 50消息/天 * 365天 = 1820亿消息/年
- 平均消息 = 200字节
- 1820亿 * 200字节 = 36.4 TB/年
场景3:视频流
需求:
- 1亿月活跃用户
- 30%每天观看 = 3000万DAU
- 平均每天观看1小时
并发观众(峰值):
- 3000万DAU / 24小时 * 3 (峰值因子) = ~400万并发
带宽:
- 平均流:5 Mbps
- 400万 * 5 Mbps = 20 Tbps峰值带宽
存储(库中10K标题):
- 平均视频 = 2小时
- 多种质量:480p (1GB)、720p (3GB)、1080p (5GB)、4K (20GB)
- 每个标题:~30 GB
- 库:10K * 30 GB = 300 TB
估计技巧
积极舍入
代替: 使用:
86,400秒 ~100,000 (10^5)
2.5百万 ~3百万
7.3拍字节 ~10拍字节
使用数量级
以10的幂思考:
- 千 (10^3)
- 百万 (10^6)
- 十亿 (10^9)
- 万亿 (10^12)
陈述您的假设
总是口头表达:
- “我假设10%的用户在峰值时活跃”
- “我估计平均消息大小为200字节”
- “我使用3x复制因子”
合理性检查结果
计算后,询问:
- “这有意义吗?”
- “这是在正确的数量级上吗?”
- “如果我的假设偏离10倍会怎样?”
常见错误
错误1:忽略峰值与平均
问题
为平均负载调整规模。
平均QPS:10,000
峰值QPS:30,000(通常为平均的2-3倍)
如果您为10,000调整规模,在峰值时会失败。
错误2:忘记复制
问题
计算原始存储而不考虑副本。
数据:1 TB
带3个副本:3 TB
带备份:4-5 TB
错误3:不考虑增长
问题
为当前而非未来调整规模。
当前用户:1000万
预期增长:50%/年
第3年:1000万 * 1.5^3 = 3400万用户
至少为2倍当前调整规模以避免近期问题。
错误4:过度精确
问题
计算到3位小数。
差:"我们恰好需要3,456,789 IOPS"
好:"我们大约需要3-4百万 IOPS"
快速参考计算
| 需求 | 公式 |
|---|---|
| QPS | 用户数 * 每天操作数 / 86400 |
| 每日存储 | 每天项目数 * 每个项目大小 |
| 带宽 | QPS * 响应大小 |
| 缓存命中率 | 1 - (数据库QPS / 总QPS) |
| 所需服务器 | QPS / 每服务器QPS |
| 所需分片 | 数据大小 / 最大分片大小 |
相关技能
design-interview-methodology- 整体面试框架quality-attributes-taxonomy- NFR定义(可扩展性、性能)database-scaling- 数据库容量规划(阶段3)caching-strategies- 缓存规模调整和命中率(阶段3)
相关命令
/sd:estimate <scenario>- 交互式计算容量
相关代理
capacity-planner- 带计算的引导估计
参考资料
references/latency-numbers.md- 完整延迟参考表
版本历史
- v1.0.0 (2025-12-26): 初始发布
最后更新
日期: 2025-12-26 模型: claude-opus-4-5-20251101