标书上白纸黑字写着「三千路接入」,采购照着三千路去买上行带宽、配存储盘,设备上架后第一个冒出来的告警却是 SIP 注册超时——设备列表里的点位时隐时现,点播点不开,而此刻 CPU 还闲着、磁盘也才写了不到一成。问题不在路数算错了,在于把点位数当成了资源规划的输入。点位数只决定台账规模和注册会话条数,真正吃掉带宽、CPU 和磁盘的,是另外三个彼此独立的量。
点位数不是负载,是台账规模。三千路设备挂在线上,没人点播就不产生媒体流,只产生注册与保活的小包。
规划输入要换成三个量:同时取流路数、转封装输出路数、录像写入路数。这三个量可以一大两小,也可以三个同时压满,配比只有现场统计能给。
最先崩的通常是信令层。不是因为它吃资源最多,而是它抖一下会引发全平台重注册,把本来没事的媒体层和录像层一起拖下水。
录像盘的问题往往不是容量不够,是写和读抢同一组盘。持续写入占着顺序带宽,回放是随机读,混在一组盘上,容量再大也会卡。
上行带宽按同时取流路数买,不按点位数买。这两者的比例写不进标书,也猜不出来。
在 GB/T 28181 的体系里,一个"点位"在平台上对应的是一个具备唯一编码的监控点,它在信令层面是一条注册会话、一条目录项;在媒体层面,它只是一路"可以被点播"的潜在流。潜在流不等于实际流。摄像机本身不会主动把码流灌给平台——常见实现里,媒体流是在平台发起点播(Invite)之后才建立的,或者是平台下发录像回放控制之后才开始的。也就是说,三千个点位在绝大多数时间里,只有一小部分在往外发流。
这就产生了一个很朴素的判断:点位数决定的是"状态量",不是"流量"。状态量的资源表征是会话表条目数、目录项数、数据库行数,这些吃内存和少量存储;流量才吃带宽、CPU 和磁盘 IO。把状态量当成流量去采购,结果必然是某几层严重过剩、某几层严重不足——过剩的通常是存储容量,不足的往往是信令处理能力、上行带宽和转封装的 CPU。
更麻烦的是,同一份标书里的三千路,在不同业务下的实际负载可以差出好几倍。工厂园区的三千路,可能只有门岗和产线关键工位的十几路在值班室大屏上常年显示,其余点位只在事后查录像时被回放;连锁门店的三千路,可能每家店都有店长手机端同时预览两到四路,早班晚班交接时还会集中拉流;平安城市类项目则往往叠加上级平台的联网调阅,随时可能被上级抽调几十路并发。三种业务的点位数完全一样,资源画像完全不同。
所以规划的第一步不是算"三千路要多少资源",而是先把三千路拆成三张表:一张是有多少点位需要 7×24 持续录像(决定录像写入路数与盘容量),一张是常态下有多少路被同时预览或转发给上级(决定媒体接收与转封装的压力),一张是峰值的突发调阅(决定上行带宽和转发层的余量)。这三张表的数字,必须来自业务方的确认和上线后的持续统计,不能由架构师拍脑袋。
把这三层之外的东西也加起来,一个典型的视频接入平台在功能上可以拆成五层。分层的意义不是为了画架构图好看,而是为了让每一层有各自独立的扩容办法——某一层打满了可以单独加机器,而不是整机换掉。
信令层基于 SIP,承担设备注册、注册保活(心跳)、注销、目录查询与订阅通知、实时点播的建立与拆除、录像检索与控制、以及向上级平台的注册与级联。它的流量特征是包小、条数多、状态性强:单个 REGISTER 消息只有几百字节到一两 KB,但三千路设备按固定周期保活,每秒的消息条数是稳定的常量;一旦出现异常,这个常量会在几秒内放大成洪峰。信令层是所有其它层的前提——信令不通,媒体流建立不起来,录像检索也发不出去。
媒体层负责接收设备侧发来的码流。按公开标准常识,GB/T 28181 体系里媒体流常用 RTP 承载 PS(节目流),传输层可用 UDP 或 TCP,具体以现行标准文本与设备厂商实现为准。这一层干的是收包、排序、缓冲、再按分发目标复制出去。它的资源画像很纯粹:上行带宽是 fan-in(多路设备往平台打),下行带宽是 fan-out(同一路流分发给多个客户端),内存主要被每路的接收缓冲和分发队列占用,CPU 消耗相对低——前提是不做封装转换和转码。
PS 是面向存储的封装,浏览器和移动端播放器一般不认。要让 Web 端、手机端看到画面,就得把 PS 解复用出音视频 ES,再重新封装成 HLS、HTTP-FLV、RTMP 或者 WebRTC 之类的形态。这一层是整条链路上 CPU 密度最高的地方,也是"输出几种格式"这件事直接决定资源形态的地方。如果需要改分辨率、改码率、改编码格式,那就是转码,消耗再上一个台阶;算法分析另算,不在这层的账里。
录像层把收到的码流按时间切文件落盘,同时维护索引——哪个点位、哪段时间、对应哪个文件、文件里第几个字节是关键帧。写入是顺序的,但索引的更新是零碎的随机写。录像层还有一个容易被忽略的动作:循环覆盖。留存期满了之后要删除最老的文件并复用空间,删和写同时发生,盘上的碎片和 IO 竞争都会上升。
回放不是简单地把文件读出来。用户会拖动时间轴、会倍速、会同时开多路回放、会把一段录像下载下来当证据。拖动意味着随机定位,倍速意味着只抽关键帧(I 帧)跳过中间帧,这两种操作对磁盘的访问模式完全不同:倍速回放抽帧读是随机小 IO,下载是连续大块读。这一层直接和录像层抢同一组物理盘的 IO,是回放卡顿最常见的根因,而不是"盘不够大"。
先说结论:信令层崩,很少是因为它算不过来,多数是因为它被自己引发的连锁反应压垮。SIP 注册是有有效期的,设备注册成功之后拿回一个过期时间,必须在到期前重新注册续期;同时设备会按周期发保活消息告诉平台"我还活着"。平台侧则要维护一张会话表,记录每台设备的地址、端口、过期时间、在线状态,并通常会把状态变化落到数据库里供业务界面展示。
问题出在"同时"两个字上。园区统一供电的场景里,几十台交换机上挂的摄像机是同一秒钟得电的;机房断电恢复后,所有设备会在 UPS 撑住的几分钟内集体上线;某次固件批量升级之后,几百台设备会在同一时间重启;NTP 校时把一批时钟漂移的设备拉回整点之后,原本被时间打散的刷新动作会被对齐到同一个时刻。这些场景的共同特征是:原本均匀分布在时间轴上的注册请求,被压缩到了一个几十秒的窗口里。
洪峰本身未必打垮信令服务器——REGISTER 消息很小,现代 CPU 处理几万条消息并不吃力。真正致命的是它触发的三件事叠在一起。第一件是重注册风暴:一部分设备因为超时被平台判定离线,设备侧检测到异常后立刻重试,重试又超时,于是重试频率翻倍,请求量呈指数式往上爬。第二件是数据库写放大:很多实现在每次注册状态变更时都写一次库,三千路设备集体抖动,就是几千次乃至上万次单行写入,数据库连接池和写 IOPS 先于 CPU 见底,然后慢查询堆积,反过来拖慢注册响应,形成正反馈。第三件是级联侧的连锁:平台向上级的状态推送也跟着抖,上级以为下级挂了,重新发起目录订阅,下级又得全量推一遍目录。
对应的做法其实不复杂,但必须在压测之前就做掉,不能等上线救火。注册状态先写内存或缓存,按批量、按时间间隔异步落库,让数据库只承担最终一致的状态而不是每一次抖动;设备侧的注册过期时间不要整齐划一,接入时下发一个带随机抖动的过期时长,把刷新动作在时间轴上摊平;对同一个设备的重注册做退避限制,避免设备自己把自己打死;信令服务要能独立扩容,不能和媒体服务挤在同一台机器的同一个进程里抢 CPU。这几件事做完,三千路的注册洪峰通常就不再是问题。
只要平台不是孤立的,就要面对级联。GB/T 28181 的设计里本身就包含平台之间的互联与级联,下级平台向上级注册、上级向下级订阅目录、调阅实时流与录像,具体机制以现行标准文本与厂商实现为准。对资源规划来说,级联的意义在于:它给信令层加了一整套和"设备接入"完全不同形状的负载。
设备侧的负载是海量小包,级联侧的负载是少量大块。一个上级平台订阅下级的目录,下级要把自己域内的所有监控点组织成目录项推上去——三千个点位就是三千条目录项,如果按区域、按组织机构再分层推送,消息条数还要翻倍。目录项是 XML 文本,单条几百字节到几 KB,全量推一次就是几 MB 到十几 MB 的消息序列,解析这些 XML 消耗的是实打实的 CPU,而把它们落到上级的目录表里消耗的是批量写入 IO,和设备注册那种单行写入完全不是一个量级。
重试放大是级联最狠的地方。网络抖一下、心跳丢几个包,上级判断下级失联,重连之后重新订阅目录,下级又推一遍全量。如果网络处在"时好时坏"的状态,这个循环会以分钟级甚至秒级的节奏反复发生,CPU 和数据库持续被全量同步占着,正常的点播请求反而排不上队。更隐蔽的一种情况是:下级平台恢复了,但上级还保留着旧会话,新会话和旧会话并存,目录里出现重复点位,业务侧看到的就是"同一个摄像头出现了两次,一个在线一个离线"。
处理思路上有几条比较硬的经验。级联网关和设备接入服务要分开部署,让级联的抖动不要直接冲击设备侧的注册通道;目录要缓存,支持增量同步而不是每次全量;重连要有指数退避,并且对"短时间内的重复全量同步"做合并,避免同步风暴;心跳丢失的判定阈值不要设得太激进,宁可晚一点判定离线,也不要因为几秒抖动触发全量重同步。这几条做不到的平台,在跨级联网的项目里几乎必然出问题。
这一层最容易被一句话带过,也最容易在上线后成为真正的瓶颈。判断依据其实很干脆:看输出几种格式、要不要转码。
如果只输出一种、且不需要改变编码——比如收到的就是 H.264,要转的只是封装(PS 转 FLV 或 HLS 切片),那么主要消耗是内存和网络。每路流要开接收缓冲、要维护一个 GOP 左右的窗口用于切片对齐,几十路并发就是几百 MB 量级的常驻内存,CPU 只做解复用和重新打包,属于轻量操作。这种情况下先见底的是内存和网络,CPU 还有大量余量。
如果同时输出三种格式——比如 Web 端要 HLS、客户端要 RTMP、移动端要 FLV——那么同一路输入要复制出三份处理链路,CPU 和内存同时线性上涨,而且每多一种格式,就多一份切片缓冲和一份连接数。这时候 CPU 通常是先见底的那个。
如果还要转码——把 1080P 4Mbps 转成 720P 1Mbps 给手机看,或者把 H.265 转成 H.264 给老客户端看——那就是另一回事了。转码是整条链路里最重的操作,纯软件转码下单路 1080P 就要吃掉相当可观的一个核,几十路并发足以打满一台双路服务器;用 GPU 硬编解码器可以显著提高单卡承载的路数,但会引入显存、编码器会话数上限这些新的约束,也要按输出路数单独核算。这一块的账和 AI 推理完全不同,算法分析另算。
所以给这一层留资源的时候,先问业务方一句话:到底要几种输出?如果答案是"先做一种,后面再说",那就按一种配,把横向扩容的口子留好;如果答案是"Web、APP、大屏、上级平台各要一种",那就在立项初期就把转封装单独拆成一个可扩容的集群,不要塞进接入服务器里。塞进去的后果是:转码把 CPU 打满,同一个进程里的信令处理跟着变慢,设备注册开始超时——于是又回到第一层崩的那个现象上,但根因完全不在信令。
| 层级 | 主要负载 | 资源消耗点 | 常见故障表现 | 扩容办法 |
|---|---|---|---|---|
| 信令层(SIP 注册与保活) | 设备注册、注销、周期保活、目录订阅与通知、点播与回放控制信令 | 消息解析与鉴权的 CPU、会话表常驻内存、文件描述符与连接数、注册状态落库的写 IOPS | 注册超时、点位时隐时现、点播无响应、数据库连接池满、重注册风暴 | 与媒体层分离独立部署;按点位总数估会话内存;状态入缓存后批量异步落库;下发带随机抖动的注册过期时间做错峰 |
| 媒体接收与转发层 | RTP 收包、排序缓冲、按分发目标复制转发、端口段管理 | 上行 fan-in 带宽、下行 fan-out 带宽、收包软中断的 CPU、socket 缓冲内存、并发连接数 | 花屏马赛克、卡顿、丢包、点播首帧慢、端口耗尽 | 按同时取流路数乘单路码率买上行;多网卡或分流前缀分担收流;调内核网络参数;横向扩接收节点并做负载均衡 |
| 级联与目录同步层 | 向上级注册、目录全量推送、增量同步、状态与心跳上报、跨级点播转发 | XML 序列化与解析的 CPU、目录缓存内存、批量写入的数据库 IO、级联链路带宽 | 目录不全或重复、点位显示为离线、断链后反复全量重推、上级调阅失败 | 级联网关独立部署;目录落缓存并支持增量;重连指数退避并合并重复同步;放宽失联判定阈值 |
| 转封装层 | PS 解复用、重新封装为 HLS/FLV/RTMP 等、必要时转码与切片 | 每种输出格式各占一份 CPU 与缓冲内存、转码时编码器算力或显存、GOP 窗口与切片缓冲 | 首帧慢、时延高、CPU 打满后掉流、多路观看时音画不同步 | 先砍输出格式种类;能转发不转码;按输出路数而非输入路数扩容;转码节点单独成池,必要时引入硬件编解码 |
| 录像层 | 码流持续写入、时间切片、索引维护、到期循环覆盖 | 顺序写带宽、索引随机写 IOPS、盘容量、RAID 或纠删的写惩罚、文件系统的元数据开销 | 录像有缺口、磁盘提前写满、覆盖动作卡住、索引损坏导致检索为空 | 按码率乘路数乘留存天数算容量并留余量;预分配文件减少碎片;索引盘与媒体盘物理分离;扩盘位或加节点分摊写入 |
| 回放与下载层 | 历史码流随机读、倍速与拖动、多路并发回放、批量下载 | 随机读 IOPS、大块顺序读带宽、与录像写入争抢同一组盘的 IO、回放会话内存 | 拖动卡、倍速卡、下载速度上不去、并发回放数一多看不了 | 读写盘组分离;热点片段与近期录像放高速盘;回放限速与排队;对批量下载错峰调度 |
| 数据库与状态存储层 | 设备台账、目录、录像索引、告警与操作日志、业务配置 | 写入 IOPS、连接数、索引膨胀后的查询耗时、日志表体积增长 | 平台页面打开慢、录像检索超时、连接池打满、磁盘被日志撑爆 | 索引与业务库分离;写入异步化;按保留期分区清理;慢查询建索引、控制单次返回条数 |
录像盘的账面上只有一个数字——容量。但真正决定体验的是访问模式。写入侧,几十路乃至几百路码流同时往盘上写,每路都是追加式顺序写,单个文件的写指针只往前走,这对机械盘是友好的:顺序写的吞吐可以接近盘的理论带宽。问题在于几百路并发意味着几百个文件同时打开、同时追加,盘头要在几百个位置之间来回跳,宏观上的"顺序写"退化成微观上的大量随机寻道,机械盘的吞吐会明显掉下来。这是很多项目"算出来带宽够、写起来却追不上"的原因。
容量本身反而好算。通用算式就是码率乘路数乘留存天数:单路 4Mbps 的画面,一天大约产生 42GB 上下;一百路这样的点位存 30 天,就是 4Mbps÷8×86400 秒×100 路×30 天,算下来约 126TB。以下为假设场景,实际还要叠加音频、冗余、文件系统开销和 RAID 的容量损失,通常要再留百分之二十以上的余量。把这个算式写进方案书没什么风险,风险在于算完之后就以为存储问题解决了。
回放侧的模式和写入侧是冲突的。用户拖动时间轴,播放器请求的是"某个时间点附近的关键帧",这是一次随机定位;倍速回放要连续抽取 I 帧跳过 B、P 帧,读的也是离散分布的小块;只有整段下载才是连续大块读。也就是说,只要有人在回放,盘上就同时存在几百路顺序写和若干个随机读,机械盘的寻道开销被放大,写入吞吐和回放响应一起变差。用户感受到的"回放卡顿",多数不是盘容量不够,也不是盘总带宽不够,而是 IOPS 被争抢。
对应的处理有几条比较实在。索引文件单独放 SSD:索引是典型的随机小写,放在机械盘组里既拖慢自己又拖慢码流写入。近期录像和远期录像分层:最近三天被回放的概率远高于三十天前,把近期数据放在高速盘组、过期后迁移到容量盘组,性价比很高。读写分离:有条件的话,让回放请求走独立的副本或者独立的节点,别和写入挤同一组盘。预分配:录像文件按固定大小预分配而不是边写边扩,能显著减少长期循环覆盖带来的碎片。盘组规划上,RAID 或纠删的写惩罚要计入,重建时间也要计入——一块大容量盘重建动辄十几小时,重建期间写入性能下降,如果此时正好是业务高峰,体验会很糟。
园区和工厂的摄像机绝大多数在私网里,地址是 RFC1918 的内网地址,或者干脆挂在 4G/5G 无线链路后面。媒体流要进到平台,路径无非几种:平台主动点播时,设备从内网往平台指定的地址和端口发流,NAT 设备上留下一条会话映射;设备侧靠周期性的保活消息维持这条映射不被老化;或者采用 TCP 长连接由设备主动建链,平台在这个连接上收发媒体。具体采用哪种、UDP 还是 TCP,取决于厂商实现和现场网络条件,以现行标准文本与设备厂商实现为准。
这里有两个容易翻车的点。一个是 NAT 会话老化:运营商侧或出口防火墙的 UDP 会话老化时间如果短于设备的保活周期,映射会被清掉,平台再点播就收不到流,表现为"第一次能看,过一会儿就看不了"。判断方法很简单,抓一下出口设备的会话表老化时间,和设备保活周期比一比。另一个是端口规划:平台侧接收媒体流需要一段端口,路数越多端口段越大,防火墙要同步放行,NAT 网关的会话数上限也要核——几千路设备各自维持一条到数条会话,是会撞到网关规格的。
带宽 fan-in 的口径必须说清楚。上行带宽需求等于"同时取流路数乘单路码率",不是"点位数乘单路码率",也不是"录像路数乘单路码率"。如果平台只在有人看的时候才点播,那么上行带宽的峰值取决于大屏与客户端的并发观看路数;如果平台对所有点位做持续录像,那么即使没人看,所有点位也在持续往平台上打流,上行带宽就必须按录像路数来算——这正是很多园区项目上行带宽吃紧的根源,不是看的人多,是录像一直在跑。
机型比选上,视频接入平台对服务器的要求和 GPU 算力机完全不是一回事:它要的是较大的上行带宽、足够的本地盘位、稳定的网络和够用的多核 CPU,而不是显卡。做上行带宽与大容量本地盘机型的比选时,可以拿一万网络的裸金属 E5-2698v4×2 ¥3999 起、一万云 ¥25 起这类明示档位先做一个量级上的横向参照(以官网实时价为准);本地盘容量、盘位数量、是否支持 NVMe 缓存盘、上行带宽的具体档位这些未明示的规格,属于需要按配置单独确认的部分,写方案时应标注"需询价 / 以官网实时报价为准",不要按估的数值去签预算。带宽这一项尤其要单独确认口径——按固定带宽计费还是按峰值计费、上行是否单独计价、超出的部分怎么算,这几条直接决定月度成本能不能控住。
坑一:按点位数买上行带宽。为什么坑:点位数和实际并发取流路数之间没有固定比例,用点位数算出来的带宽要么严重过剩,要么在录像全量上行的场景里严重不足。怎么判断:把"有多少路在持续录像"和"峰值有多少路被同时观看"分别问清楚,取两者中较大的那个作为上行带宽口径。怎么避:合同中把带宽口径写成"按同时取流路数核算",并预留一次扩容窗口;上线后按周统计实际上行峰值,用数据反推下一期采购。
坑二:信令服务和媒体服务挤在同一台机器。为什么坑:两者的资源曲线不同步,转封装把 CPU 打满时,同机上的 SIP 处理跟着变慢,注册开始超时,而排查人员会去查网络、查设备,很难第一时间怀疑到转码。怎么判断:出现注册超时的同时,看 CPU 是不是被转封装进程占满,两者在时间上高度相关基本就能定位。怎么避:信令单独部署,至少单独进程并做资源限制,让一层打满不直接影响另一层的响应。
坑三:注册状态每次变更都直接写数据库。为什么坑:三千路设备集体抖动就是几千次单行写入,叠加业务侧的日志写入,数据库连接池和写 IOPS 见底,慢查询反过来拖慢注册处理,形成正反馈。怎么判断:抖动期间数据库慢查询数量与注册超时数量同步上升,就可以确认。怎么避:状态先入缓存,按批量异步落库;给状态变更做合并,短时间内的反复上下线只保留最终结果;连接池上限和写入线程数提前压过一轮。
坑四:把录像容量当成存储层唯一指标。为什么坑:容量算对了不等于体验没问题,回放的随机读和持续写入抢 IO,机械盘在几百路并发写加随机读的组合下吞吐会大幅下降。怎么判断:容量充足、CPU 不高,但拖动时间轴和倍速回放明显卡,看盘的平均寻道与 IO 等待就能确认。怎么避:索引盘独立、近期录像分层到高速盘、回放与写入尽量分离、文件预分配减少碎片。
坑五:级联层和设备接入层共用一套服务。为什么坑:上级平台的目录订阅和全量同步是重量级操作,网络一抖就反复触发,会把设备侧的注册通道一起挤掉。怎么判断:上级平台断链重连的时间点,和设备侧注册超时的时间点高度重合。怎么避:级联网关独立部署,目录缓存支持增量同步,重连用指数退避并对重复全量同步做合并,失联判定阈值放宽到能容忍几秒抖动。
问:点位数和并发取流路数的比例怎么定?有没有通用经验值?
没有可以跨项目复用的固定比例。同一个三千路平台,工厂值守场景可能常态只有十几路在上大屏,连锁门店场景可能每家店都有人手机预览,平安城市场景还要叠加上级随机抽调,三者算出来的并发数差很多。可行的做法是分两步:立项时让业务方给出"常态并发"和"峰值并发"两个书面数字,并把它们写进方案假设;上线后在平台侧持续统计每天的实际并发取流曲线,跑满一个月再回头修正。规划时按峰值并发配资源、按常态并发算成本,比拍一个比例靠谱得多。
问:信令层要不要独立部署?规模小的话能不能合并?
小规模项目合并部署不是不行,但要有底线:至少做到进程级隔离和资源限制,让转封装或者数据库慢查询不会直接抢走信令的 CPU 和连接。判断要不要分开,看两件事——点位是否超过一两千,以及是否存在级联。有级联就必须分开,因为上级的目录同步是重量级且不可预测的负载;点位多但无级联,可以先合并,把横向拆分的改造预留好。真正不能合并的是信令和数据库,信令的响应时延对数据库慢查询极其敏感,两者至少要有连接池和超时上的硬隔离。
问:录像留存多少天,怎么算需要多少盘?
通用算式是码率乘路数乘留存天数。举例(以下为假设场景):单路 4Mbps,一天约 42GB,两百路存 30 天,就是 4÷8×86400×200×30,约 252TB。这个数字不能直接当采购量,还要叠加三块开销:文件系统与元数据开销、RAID 或纠删带来的容量损失、以及为循环覆盖和碎片预留的余量,合计通常再加两到三成。留存天数本身由业务合规要求决定,不要由存储预算倒推——常见错误是"盘买少了就改成存 15 天",这在需要调阅历史证据的场景里会直接出问题。
问:转封装用 CPU 还是 GPU?什么时候才需要考虑硬件编解码?
先看是不是真的需要转码。只换封装不改编码,那份开销是解复用和重新打包,CPU 完全够,没必要上显卡。真正需要硬件编解码的是要改分辨率、改码率、改编码格式的场景,比如把 1080P 转给手机端、把 H.265 转成 H.264 给老客户端。此时软件转码在几十路并发就会明显吃紧,硬件编码器能显著提高单卡承载路数,但同时引入显存、编码会话数上限这些新约束,需要按输出路数单独核算。判断依据很直接:监控转封装进程的 CPU 占用,长期超过总核数的一半就该考虑分流或换硬件方案。
问:级联抖动怎么处理,为什么一抖就是全平台问题?
因为级联断链会触发目录全量重同步,而全量同步的负载形状和设备注册完全不同——它是少量大块消息,吃的是 XML 解析 CPU 和批量写入 IO。网络在时好时坏的状态下,这个循环会反复发生,把 CPU 和数据库持续占住,正常的点播请求排不上队,表现出来就是全平台变慢。处理上做四件事:级联网关独立部署、目录缓存支持增量同步、重连用指数退避、把失联判定阈值放宽到能容忍几秒抖动。另外要合并短时间内重复的全量同步请求,避免同步风暴自己把自己打死。
问:设备时间不同步有什么后果?看起来只是显示不准而已。
后果比显示不准严重得多。录像检索是按时间段查的,设备时间漂移会让实际画面和索引时间对不上,调阅时看到的可能是另一段时间的画面,这在需要取证的场合是硬伤。信令侧的注册过期计算也依赖时间,设备时钟跳变可能导致注册被提前判定过期,或者保活消息的时间戳异常被拒。NTP 校时本身还有个副作用:一批时钟漂移的设备被同时拉回整点,原本分散的刷新动作被对齐,瞬间形成注册洪峰。所以既要部署统一的时钟源,也要注意校时动作本身不要在同一时刻作用于全部设备。
问:回放卡顿是不是盘不够?扩容能不能解决?
多数情况下不是容量问题,甚至不是盘的总带宽问题,而是 IOPS 争抢。持续写入占着顺序带宽,回放的随机定位和倍速抽帧是随机小 IO,两者混在一组机械盘上,寻道开销被放大,吞吐明显下降。判断方法:在卡顿发生的同时看盘的 IO 等待和平均寻道指标,如果等待很高而吞吐没跑满,就是争抢而不是带宽不足。解决顺序应该是先做架构调整——索引独立盘、近期录像分层到高速盘、回放与写入分离、文件预分配——再考虑加盘。直接加盘往往只是把容量做得更大,争抢依旧存在。
问:上行带宽按什么口径买?点位数和录像路数该用哪个?
口径应该是"同时取流路数乘单路码率",关键是弄清楚哪些流是持续在跑的。如果平台对所有点位做 7×24 录像,那么没人看的时候所有点位也在上行,上行带宽就必须按录像路数算,这往往是园区项目上行吃紧的真正原因。如果只在被点播时才拉流,那上行峰值取决于大屏与客户端的并发观看路数。另外要单独确认计费方式:固定带宽还是按峰值计费、上行是否单独计价、超出部分怎么算,这几条直接决定月度成本能不能控住。合同里把口径写清楚,比事后扯皮省事得多。
层分清楚了,容量规划就有了一个明确的推进顺序——从最底下、最确定的那一层往上推,而不是从"三千路"往下摊。
第一步先定录像写入路数和留存天数,因为这两个数是硬盘的、确定的:哪些点位必须录、录多少天、单路码率多少,这三个数字一确定,盘容量就是一道乘法题,只需要再叠加上文件系统开销、RAID 或纠删损失和覆盖余量。这一层的结论不依赖任何概率判断,是全平台最不该含糊的数字。
第二步定上行带宽,口径是同时取流路数乘单路码率。这里要特别注意"持续录像"的场景——只要录像在跑,上行就在跑,点位数在这里会重新变成关键输入。上行带宽是持续成本项,算大了每月白付,算小了上线就堵,所以它值得单独做一轮业务确认,而不是沿用标书口径。
第三步定转封装的输出格式种类和并发输出路数,由此推出 CPU 或硬件编码器的规模,以及转封装集群要不要独立成池。这一步的输入完全来自产品形态:给谁看、用什么端看、要不要转码。
第四步才是信令层的规格:按点位总数估会话内存、按注册与保活周期估每秒消息条数、按抖动场景估洪峰倍数,并同步把"状态入缓存、批量落库、过期时间随机化"这几件事做进实现里。信令层的绝对资源需求通常不大,但它是可用性前提,所以要在架构上给它独立性和冗余,而不是给它最多的机器。
最后一步是级联层,规模取决于上级平台的数量、目录项总量和同步频率,没有上级联网的项目可以整层跳过。顺着这个顺序推下来的方案,每层都有独立的扩容开关:存储不够加盘或加节点、上行不够提带宽、转码不够扩转封装池、注册抖了就扩信令并优化落库——不需要整体推倒重来。
落到机房与机型这一层,视频接入平台要的是稳定的大上行、够用的多核 CPU、充足的本地盘位和可预期的运维响应,而不是显卡算力。一万网络这家成立于 2007 年的服务商,在 IDC 行业做了 19 年,自营机柜最快 1 分钟上架,点位扩容时不用等机器。。具体机型与带宽档位以官网实时报价为准。
本文关于分层结构与负载特征的判断,基于公共安全视频监控联网系统国家标准 GB/T 28181 的公开常识性描述:信令基于 SIP,媒体流常用 RTP 承载 PS(节目流),平台间支持级联与目录订阅。具体条款编号、消息字段定义与传输层约定,以现行标准文本与设备厂商实现为准,本文不引用未核实的条款细节。
关于容量算式(码率×路数×留存天数)与带宽口径(同时取流路数×单路码率),属于通用的工程计算方式,不依赖特定厂商;文中的数字示例均标注为假设场景,不构成任何项目的实际配置结论。设备侧私网接入路径、NAT 会话老化、端口段规划等内容,受现场网络条件与厂商实现影响较大,需结合现场情况确认。
文中涉及的一万网络相关产品信息与价格,参考 idc10000.net 官网公开页面的明示档位与资质描述,未明示的规格与配置以官网实时报价为准;本文未引用任何客户案例与性能对比测试数据。设备侧网络与现场链路条件不可控,实际数值仍需结合运营商、线路与具体机房情况确认。具体以签约时最新报价与合同为准。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品