容量规划与延迟数据

一个容量估算的经典错误

面试官问:"你的系统能支撑多少并发?"

候选人答:"100万。"

面试官:"怎么算出来的?"

候选人:"...我觉得够了。"

没有量化依据的容量估算毫无意义。


二、核心指标计算🔴

2.1 QPS 估算

公式:QPS = DAU × 人均请求数 / 86400秒 × 峰值系数

示例:
- DAU = 1 亿
- 人均请求数 = 50 次/天
- 峰值系数 = 10

计算:
平均 QPS = 1亿 × 50 / 86400 ≈ 58万
峰值 QPS = 58万 × 10 = 580万

2.2 延迟数据参考

操作平均延迟P99 延迟说明
L1 缓存 (本地)0.1μs0.5μsCPU 缓存
L2 缓存 (本地)1μs5μsCPU 缓存
L3 缓存 (本地)10μs50μsCPU 缓存
内存访问100μs500μsRAM
SSD 读取100μs1msNVMe SSD
磁盘读取5ms20msHDD
跨机房网络1ms5ms同城
跨地区网络30ms100ms北京→上海
国际化网络200ms500ms中国→美国

2.3 吞吐量数据参考

组件吞吐量说明
Nginx10万 QPS静态资源
Redis GET50万 QPS单节点
MySQL 单表查询1万 QPS有索引
Kafka 单分区10万 QPS单分区
ElasticSearch5万 QPS搜索

三、服务器选型🔴

3.1 CPU 选型

估算公式:所需 CPU 核数 = 峰值 QPS × 单请求 CPU 时间 / 1000ms × 目标利用率

示例:
- 峰值 QPS = 10万
- 单请求 CPU 时间 = 50ms
- 目标利用率 = 70%

所需核数 = 100000 × 50ms / 1000ms / 0.7 ≈ 7148 核

配置:8 核服务器 × 10 台 = 80 核

3.2 内存选型

估算公式:内存 = 缓存数据量 + 连接数 × 每连接内存 + 安全余量

示例:
- 热数据 = 10GB
- 连接池 = 100
- 每连接内存 = 2MB
- 安全余量 = 50%

内存 = 10GB + 100 × 2MB + 10GB × 0.5 ≈ 20GB

3.3 带宽估算

估算公式:带宽 = 平均响应大小 × QPS / 8bits

示例:
- 平均响应大小 = 10KB
- 峰值 QPS = 1万

带宽 = 10KB × 10000 / 8 = 12.5MB/s = 100Mbps

配置:100Mbps × 2(冗余)= 200Mbps

四、存储规划🔴

4.1 数据库存储估算

估算公式:存储 = 数据量 × 单条大小 × 保留时间 × 备份系数

示例:
- 日活用户 = 1 亿
- 每用户数据 = 1KB
- 保留时间 = 1 年
- 备份系数 = 3

存储 = 1亿 × 1KB × 365 × 3
     = 1亿 × 1KB × 1095
     = 109.5 TB

配置:200TB × 1.2(预留)= 240TB

4.2 缓存存储估算

估算公式:缓存 = 热点数据量 × 副本系数

示例:
- 热数据 = 1GB
- 副本系数 = 2(主从)

配置:2GB × 2 = 4GB Redis

实际经验:
- 单节点 Redis 内存 = 32GB
- 可缓存热点数据 = 20GB

五、实际案例:短链系统容量规划🟡

5.1 业务指标

指标数值
DAU1 亿
日新增短链1000 万
日点击量100 亿
峰值点击 QPS120 万
峰值创建 QPS12 万

5.2 存储规划

存储计算:
- 日新增 = 1000万
- 单条数据 = 300B(短码 + 长链 URL)
- 日存储增量 = 1000万 × 300B = 3GB
- 一年 = 3GB × 365 = 1.1TB
- 考虑索引 = 1.1TB × 1.5 = 1.65TB

MySQL 配置:
- 单库容量 = 500GB
- 需要 4 个分库

5.3 缓存规划

热点数据 = 最近 7 天 + 热门 TOP 100 万
- 7天点击 = 100亿 × 7 = 700亿
- 缓存命中率目标 = 95%
- 缓存容量 = 700亿 × 300B × 5% = 105GB

Redis 配置:
- 单节点内存 = 32GB
- 需要 4 节点集群(副本 × 2)= 8 节点

5.4 服务器规划

组件单机能力峰值 QPS所需机器
API 服务器1万 QPS120万12 × 2 = 24
Redis 集群50万 QPS120万8 节点
MySQL 分库1万 QPS12万4 × 2 = 8

六、面试中的容量估算话术🟡

6.1 经典开场

"容量规划需要从三个维度考虑:
1. 计算层(CPU/内存)
2. 存储层(数据库/缓存)
3. 网络层(带宽)

让我逐一估算..."

6.2 量化表达模板

"根据我的估算:

峰值 QPS = 平均 QPS × 峰值系数
          = 58万 × 10
          = 580万

所需服务器 = 峰值 QPS / 单机能力 / 目标利用率
          = 580万 / 1万 / 0.7
          ≈ 83 台

考虑到冗余,我建议配置 100 台服务器。"

【面试官心理】 容量估算体现的是工程量化能力。面试官想看到的是:你能把抽象的"支撑多少用户"转化为具体的数字,并说出背后的计算逻辑。


七、面试总结

级别期望表现
P5能说出 QPS、带宽、存储的基本计算方法
P6能针对具体场景做完整的容量估算
P7能给出具体的服务器配置方案