估计技术Skill estimation-techniques

这个技能提供系统设计和容量规划所需的快速估算框架,用于估计QPS、存储、带宽和延迟,帮助进行架构决策和面试准备。关键词:快速估算、系统设计、容量规划、QPS、存储计算、带宽估计、延迟参考、架构决策。

架构设计 0 次安装 0 次浏览 更新于 3/11/2026

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