总体设计就是一道算术题:路数、码率、天数进去,硬盘数、带宽、设备数出来。 难点不是算,是「按块买」带来的台阶效应。
上一节讲结构,这一节讲怎么把这套结构算成报价单。 存储细节(RAID、循环覆盖)在下一节,这一节只算总量。
一、三个输入,三个输出
| 输入 | 典型值 | 谁定 |
|---|---|---|
| 路数 | 8/16/64 | 点位表 |
| 码率 | 2~4 Mbps(1080p) | 画质要求 |
| 天数 | 30/90 | 甲方要求或行业规范 |
| 输出 | 怎么算 | 用途 |
|---|---|---|
| 硬盘容量 | 路数 × 码率 × 天数 | 报价主体 |
| 上行带宽 | 路数 × 码率 | 交换机/专线选型 |
| NVR 台数 | 路数 ÷ 单机路数 | 机柜空间 |
注意上行带宽那一行:它等于「所有路数之和」,因为每路摄像头都要把自己的流推给 NVR。 16 路 4 Mbps 就是 64 Mbps。
二、台阶效应:容量涨三倍,盘数不一定涨三倍
| 路数 | 码率 | 天数 | 原始容量 | 硬盘数 |
|---|---|---|---|---|
| 8 | 4 Mbps | 30 | 10.4 TB | 3 块 8 TB |
| 16 | 4 Mbps | 30 | 20.7 TB | 4 块 8 TB |
| 16 | 4 Mbps | 90 | 62.2 TB | 9 块 8 TB |
| 64 | 2 Mbps | 30 | 41.5 TB | 7 块 8 TB |
第二行和第三行对比:同样 16 路,天数从 30 变 90, 容量正好三倍(20.7 → 62.2 TB),但硬盘从 4 块涨到 9 块,只涨了 2.25 倍。 因为盘是整块买的,凑的是「能装下」的最小盘数。 这就是台阶效应:容量涨三倍,盘数不一定涨三倍,但绝不会少。 做预算按「容量 ÷ 单盘」估会低估,必须按块取整再算 RAID。
三、四个系数,实际要买 1.5 倍
| 系数 | 典型值 | 说明 |
|---|---|---|
| 码率余量 | +20% | CRF 模式码率会波动,按峰值留 |
| RAID5 开销 | −1/n | 4 块盘只能当 3 块用 |
| 格式化损耗 | −7% | 标称 TB 是十进制,系统显示 TiB |
| 预留空间 | −10% | 盘写满会掉速 |
四个系数叠起来要买 1.5 倍(1.2 ÷ 0.8 ÷ 0.93 ÷ 0.9 ≈ 1.79)。 报「需要 20 TB」就买 20 TB 的项目,一定会在验收前发现不够。 这四项里最容易被忽略的是第三项——硬盘标的是 TB,操作系统显示的是 TiB,差 9%。
四、带宽要分方向
| 场景 | 要算的带宽 | 为什么 |
|---|---|---|
| 本地 NVR 存 | 上行 = 全部路数之和 | 每路都要推上去 |
| 远程看一路 | 下行 = 一路码率 | 只看一路 |
| 总控中心看全部 | 上行 = 全部路数之和 | 要专线 |
第三行最容易翻车:16 路 4 Mbps 就是 64 Mbps 上行, 家用宽带的上行一般只有 30~50 Mbps,直接不够。 所以远程集中看的项目要在前端做子码流:主码流存本地,子码流(几百 kbps)送去中心看。
五、动手 Demo:给一个 16 路 30 天的项目做容量规划
Demo 写一个小规划器:输入路数、码率、天数,输出硬盘、容量、带宽、NVR 台数。 四组配置一起跑,可以横向比。
def plan(cams, mbps, days, disk_tb=8.0, raid="5"):
raw = cams * mbps / 8.0 * 86400 * days / 1e6 # TB
n_disk = max(3, int(ceil(raw / disk_tb)) + 1) # RAID5 要多一块
eff = disk_tb * (n_disk - 1)
bw = cams * mbps
return raw, n_disk, eff, bw
for cfg in [(8,4,30), (16,4,30), (16,4,90), (64,2,30)]:
print(cfg, plan(*cfg))
实跑输出:
--------------------------------------------------------------------
给一个 16 路 30 天的项目做容量规划
--------------------------------------------------------------------
**这一节写一个小工具:输入路数、码率、天数,输出硬盘数、带宽、NVR 台数。**
**全部由代码算,改一个输入就能重算一遍。**
路数 码率 天数 原始容量 硬盘数 有效容量 上行带宽
--------------------------------------------------------------------------
8 4 Mbps 30 10.4 TB 3 块 8 TB 16.0 TB 32 Mbps
16 4 Mbps 30 20.7 TB 4 块 8 TB 24.0 TB 64 Mbps
16 4 Mbps 90 62.2 TB 9 块 8 TB 64.0 TB 64 Mbps
64 2 Mbps 30 41.5 TB 7 块 8 TB 48.0 TB 128 Mbps
**第二行和第三行对比着看**:同样 16 路,天数从 30 变 90,
**容量正好三倍(20.7 → 62.2 TB),但硬盘从 4 块涨到 9 块,只涨了 2.25 倍。**
**因为盘是整块买的,凑的是「能装下」的最小盘数**。
**这就是台阶效应:容量涨三倍,盘数不一定涨三倍,但绝不会少。**
**做预算时按「容量 ÷ 单盘」估会低估**,必须按块取整再算 RAID。
**几个容易被忽略的系数:**
系数 典型值 说明
------------------------------------------------------------------
码率余量 +20% CRF 模式下码率会波动,按峰值留
RAID5 开销 −1/n 4 块盘只能当 3 块用
格式化损耗 −7% 标称 TB 是十进制,操作系统显示 TiB
预留空间 −10% 盘写满会掉速,留一点余量
**四个系数叠起来要买 1.8 倍**(1.2 ÷ 0.8 ÷ 0.93 ÷ 0.9 = 1.79)。
**做方案时报「需要 20 TB」然后买 20 TB,一定会不够**——**按 1.8 倍算是 36 TB。**
**带宽这一列也要说清方向**:
场景 要算的带宽 为什么
--------------------------------------------------------------------------
本地 NVR 存 上行(摄像头 → NVR) 每路都要推上去
远程看一路 下行(NVR → 客户端) 只看一路就够
总控中心看全部 上行 = 全部路数之和 要专线
**第三行最容易翻车**:16 路 4 Mbps 就是 64 Mbps 上行,
**家用宽带的上行一般只有 30~50 Mbps,直接不够。**
**所以远程集中看的项目,往往要在前端做「子码流」**。
**主码流存本地,子码流(几百 kbps)送去中心看。**
max(3, ...) 那个 3 是 RAID5 的最小盘数——两块盘做不了 RAID5,这个下限必须写进代码,
否则小项目会算出 2 块。
「有效容量」那一列是 RAID 之后的,比原始容量大一点(因为多买了一块盘),
这就是台阶效应看得见的地方。
30 秒实验
- 把
disk_tb改成 16,重跑,看硬盘数怎么变(不是简单减半)。 - 把 RAID 改成 6,看有效容量少多少。
- 给
raw乘 1.2 的余量,重跑,对比硬盘数变化。
常见误区
- 以为盘数 = 容量 ÷ 单盘。 要按块取整、再算 RAID,台阶效应会让结果差一整块。
- 以为带宽只算下行。 摄像头到 NVR 是上行,而且等于所有路数之和。
- 以为按原始容量买盘就行。 四个系数叠起来要 1.5 倍,不留余量一定不够。
自测三问(点开对答案)
1. 为什么 16 路 90 天的盘数不是 30 天的三倍? —— 因为盘整块买、按最小盘数取整。**容量涨三倍,盘数只涨 2.25 倍**,但绝不会更少。 2. RAID5 至少要几块盘? —— 3 块。**两块盘做不了 RAID5**,代码里要用 `max(3, ...)` 兜住。 3. 16 路 4 Mbps 的上行带宽是多少? —— 64 Mbps。**每路都要推上去,所以是相加,不是取最大。**下一节钻到存储里:标称 4 TB 到底能存多少天。
- ☐ (本节完,下一节 05.01.04 视频监控系统的存储结构设计)