一、1000人考试不等于1000个普通Web并发很多企业第一次建设在线考试系统时会问我们有1000人考试是不是买一台能支持1000并发的服务器就可以如果只是普通文字考试这个问题相对简单。考生主要进行登录获取试卷读取题目保存答案定时心跳提交试卷。这些请求绝大多数都是短连接或者短时间业务请求并不会持续占用大量带宽。但如果开启人脸识别电脑摄像头监控手机第二机位随机抓拍实时监考屏幕录制音视频录像异常视频留证情况就完全不同了。此时系统实际上已经从一个普通的Web考试系统部分变成了一个实时音视频系统。因此考试业务并发和视频并发必须分开计算。这是大型在线考试系统容量规划中非常重要的一点。二、双机位监考究竟是什么所谓双机位一般是指考生同时使用两路视频。第一路通常来自电脑。主要拍摄考生正脸考生座位答题状态身份核验。第二路一般来自手机或者外接设备。通常放置在考生侧后方用于观察电脑屏幕考生双手桌面环境周围人员是否使用第二台设备是否使用手机搜题。因此从网络角度来看一个考生实际上可能同时上传Camera ACamera B如果再叠加麦克风音频屏幕共享桌面录屏那么一个考生甚至可能同时存在34路媒体数据。所以双机位的真正难点并不是“系统能不能打开两个摄像头。”而是1000个人打开以后系统还能不能稳定运行。三、先算第一笔账单个摄像头需要多少码率视频带宽主要取决于几个因素分辨率帧率编码格式画面变化程度编码参数网络状态。企业考试没有必要追求影视级画质。监考视频主要目的通常是能够看清考生能够判断人员是否离开座位能够判断是否存在第二人员能够看清桌面基本行为。因此工程上更关注可识别性而不是高清观赏体验。例如可以设计几个档位视频档位典型分辨率推荐码率范围低码率监控360P200400 Kbps标准监控480P300600 Kbps较清晰监控720P6001200 Kbps高清监控1080P1500 Kbps以上具体数值会受到编码器、帧率和场景变化影响所以不能机械地认为某个分辨率一定对应某个固定带宽。对于企业考试而言很多时候没有必要让1000名考生全部持续使用1080P。否则网络压力会非常大。四、1000人双机位到底需要多少带宽假设进行一次1000人的在线考试。每名考生电脑摄像头一路手机第二机位一路。如果平均每路视频控制在500 Kbps那么每个人两路摄像头500 Kbps × 21000 Kbps也就是大约1 Mbps。1000名考生1 Mbps × 10001000 Mbps。也就是理论上已经接近1 Gbps持续视频上行流量。而实际系统设计时还不能按照刚刚好1Gbps来配置。因为还要考虑协议开销网络抖动重传音频信令截图考试业务请求监考人员查看视频录像传输峰值波动。因此如果真的要求1000人双机位全程持续上传视频那么网络规划已经进入Gbps级别而不是普通的100Mbps或者200Mbps宽带能够解决的问题。五、如果每路720P情况会怎样再看一个更激进的配置。假设每路视频平均1 Mbps。一名考生2路 × 1 Mbps2 Mbps。1000名考生2 Mbps × 10002000 Mbps。也就是2 Gbps。如果再增加协议余量和其他业务流量实际规划甚至可能需要更高。这就是为什么大型在线考试不能简单说我们服务器是16核32G支持1000并发。CPU和内存只是一部分。大型视频监考还必须同时考虑CPU内存网卡运营商带宽媒体节点TURN节点存储磁盘IO录像写入对象存储数据库监考端拉流。其中任何一个环节成为瓶颈都可能导致视频卡顿第二机位离线录像缺失监考画面打不开。六、考试系统最容易犯的错误让业务服务器同时扛所有视频一种比较危险的架构是考生 ↓ 考试Web服务器 ↓ 视频 ↓ 录像 ↓ 数据库所有请求全部集中到一套服务器。这种方案小规模演示可能没有问题。例如20人50人100人。但是规模一旦扩大很容易出现资源竞争。考试答题需要低延迟高可靠答案不能丢。而视频监控允许一定程度降码率降帧短暂抖动。两种业务对系统资源的要求并不相同。因此更合理的架构应该是┌─ Exam API │ 考生 ─ Gateway ─────┼─ Answer Service │ └─ Exam Session 考生摄像头 ↓ Media Gateway ↓ WebRTC / Media Server ↓ Recording Service ↓ Object Storage Server ↓ Recording Service ↓ Object Storage Server ↓ Recording Service ↓ Object Storage也就是考试业务平面和媒体视频平面尽量解耦。这样即使某个视频节点压力过高也不应该直接导致答案保存失败考试页面打不开最终交卷失败。七、宏远培训考试系统为什么强调业务链路与监考链路分离以宏远培训考试系统的大型考试设计思路为例在涉及远程监考、防作弊和正式考试保障时系统关注的不只是“有没有摄像头”。更重要的是把几个链路分别管理。1. Exam Session链路负责考生身份考试场次进入时间剩余考试时间设备状态登录Session掉线恢复。2. Answer链路负责答案保存版本控制自动保存最终交卷重复提交控制异常恢复。3. Monitoring链路负责摄像头状态第二机位视频监控异常行为随机抓拍监考操作。4. Audit Log链路负责什么时候登录什么时候开始考试什么时候摄像头中断什么时候第二机位掉线什么时候切断什么时候第二机位掉线什么时候切屏什么时候重新连接监考员什么时候处理考生什么时候交卷。这样的设计价值在于视频出现问题不等于考试答题数据出现问题。这对于正式考试尤其重要。八、1000人考试为什么必须支持Adaptive Bitrate如果1000名考生全部固定720P25fps1Mbps然后网络不好也不允许降低码率这种方案实际使用体验往往并不好。因为考生网络环境差异非常大。有人使用企业专线家庭宽带校园网Wi-Fi4G5G甚至手机热点。系统需要解决的问题不是“所有人都必须上传高清画面。”而应该是在保证监考有效性的前提下让系统尽可能维持连接。因此可以引入Adaptive Bitrate也就是动态码率。例如正常状态720P 800 Kbps 15fps网络下降以后480P 450 Kbps 12fps继续下降360P 250 Kbps 8fps极端状态甚至可以降低帧率优先保证关键帧降低分辨率暂停非关键音频只保留定时抓拍。目标不是让监考视频永远保持高清而是尽量避免直接断流。九、相比“高清”考试监控更应该优先保证什么监考视频的优先级通常应该是第一连接持续性第二人物可识别第三异常行为可判断第四关键事件可留证第五最后才是画质。因此宏远培训考试系统这类面向企业正式考试的系统在设计防作弊能力时更重要的是把人脸摄像头第二机位异常检测时间线监考操作考试日志关联起来。例如10:02:13 进入考试 10:02:18 人脸核验通过 10:02:24 第一机位上线 10:02:36 第二机位上线 10:26:11 第二机位网络异常 10:26:17 自动重连 10:26:22 第二机位恢复 10:26:23 记录异常事件 10:45:31 检测切屏 10:45:32 生成异常日志 11:01:08 正常交卷比单纯保存一段2GB的视频更容易进行查询审计复核争议处理。十、录像为什么不建议生成一个2小时的大文件假设一场考试持续120分钟。如果服务器从考试开始一直录到考试结束然后最终生成一个student_10001.mp4这样的单一大文件看起来简单但存在明显问题。第一网络断开时文件可能损坏。第二上传失败以后可能需要重新上传巨大文件。第三录像异常以后不容易恢复。第四多个考生同时写大文件对磁盘IO压力明显。第五后续查找某个异常时间点不够方便。因此更加可靠的方式通常是分片录像。例如每30秒每60秒每2分钟生成一个Segment。示意Exam Recording segment_0001 text Exam Recording segment_0001 segment_0002 segment_0003 segment_0004 ... segment_0120然后记录UserId ExamId SessionId DeviceId SegmentNo StartTime EndTime StoragePath Checksum UploadStatus这样即使某一个分片出现问题也不会导致整场录像全部损坏。十一、录像分片还解决了断网恢复问题假设某个考生10:15:00网络断开。10:15:38网络恢复。如果采用持续大文件录像异常持续大文件录像异常持续大文件录像异常处理非常麻烦。而采用Segment以后可以形成10:14:00-10:15:00 Normal 10:15:00-10:15:38 Offline 10:15:38-10:16:00 Reconnect 10:16:00-10:17:00 Normal系统不一定系统不一定系统不一定要假装“录像从来没有中断。”更专业的做法是真实记录中断。并将它作为考试时间线的一部分。这正是监考系统和普通视频会议系统的区别之一。在线考试更关心证据真实性异常可追溯性。十二、1000人双机位一小时到底会产生多少录像异常可追溯性。十二、1000人双机位一小时到底会产生多少录像这个数字采购人员和技术人员都非常关心。我们可以做一个简单估算。假设每路摄像头平均500 Kbps。那么一小时大约产生500 Kbps × 3600秒 ÷ 8≈225 MB。一个人两路225 MB × 2450 MB/小时。1000人450 MB × 1000450000 MB。也就是大约450 GB/小时。如果考试持续2小时约900 GB。注意这还只是粗略估算。没有计算音频截图容器封装冗余备份索引文件。因此1000人双机位正式考试很容易一场考试就产生接近TB级录像数据。这也是为什么录像策略必须提前设计。十三、录像是不是必须全部长期保存未必。这是企业考试系统设计中非常重要的成本问题。可以按照考试等级设计不同策略。普通内部培训考试可以只保留异常截图异常录像片段日志。重要岗位考试可以保存第一机位全程录像第二机位异常片段。技能竞赛或者重要认证可以保存双机位全程录像全部异常记录操作日志。高风险正式考试甚至可以增加屏幕录制双机位音频监考操作录像。因此合理的系统不应该只有一个“录像开/关”按钮。而应该允许按考试类型设置不同的监考策略。十四、可以使用冷热分层降低录像存储成本例如考试结束07天Hot Storage保证监考人员可以快速查看。830天Warm Storage访问频率降低。30天以后Cold Storage仅在申诉或者审计时调取。到达保存周期以后自动归档或者删除。可以形成实时录像 ↓ 热存储 ↓ 考试复核 ↓ 温存储 ↓ 归档 ↓ 冷存储 ↓ 生命周期删除这样能够显著降低长期存储成本。十五、为什么“所有监考老师同时看1000个视频”也是一个坑另一个经常被忽略的问题是视频不仅有上传流量。还有下载流量。如果监考中心一次展示1000个实时视频窗口。即使每个视频只有300 Kbps。那么300 Kbps × 1000300 Mbps。如果双机位全部打开600 Mbps。而且这只是一个监考终端。所以真正的大规模监考中心不能简单理解成“一次把1000个高清摄像头全部拉下来。”更合理的设计是列表缩略图低码率预览分页异常优先重点人员高清拉流。例如正常考生只显示状态。张三 考试中 双机位正常 无异常出现异常后李四 第二机位离线 切屏2次 人脸异常1次系统自动把李四提升到监考员关注列表。这种异常驱动监考往往比1000宫格更加有效。十六、宏远培训考试系统的监考中心更应该解决“谁需要看”以宏远培训考试系统的监考中心设计思路为例监考员首先看到的不是1000个等价的视频窗口而是考试运行状态。例如应考人数已登录人数考试中人数已交卷人数掉线人数异常人数。然后系统根据人脸异常摄像头关闭第二机位掉线切屏长时间无操作网络异常自动形成异常列表。监考人员优先处理异常考生。需要时再打开第一机位第二机位屏幕异常截图操作日志。这种设计能够明显降低监考端带宽也能够减少监考老师的信息过载。十七、第二机位掉线以后应该直接强制交卷吗不建议所有考试都采用同一规则。因为第二机位掉线可能来自Wi-Fi切换手机锁屏浏览器被系统回收网络瞬时抖动4G/5G切换手机电量不足。如果一掉线就直接交卷很容易产生大量争议。更合理的是设计状态机。例如ONLINE ↓ DEGRADED ↓ RECONNECTING ↓ OFFLINE ↓ RECOVERED系统可以设置5秒内自动恢复30秒触发提示60秒生成异常持续超过N分钟通知监考员达到策略阈值以后才执行强制措施。宏远培训考试系统可以把设备掉线恢复时间异常次数监考员处理记录到Exam Session和Audit Log中。这样考试结束以后才能解释“这名考生到底发生了什么。”十八、视频服务器也需要水平扩展1000人双机位意味着2000路视频源。不要把所有视频都压在单节点上。更合理的是┌─ Media Node 把所有视频都压在单节点上。 更合理的是 text ┌─ Media Node 把所有视频都压在单节点上。 更合理的是 text ┌─ Media Node 01 │ Load Balancer ───┼─ Media Node 02 │ ├─ Media Node 03 │ └─ Media Node N考生进入考试以后根据场次地区节点负载网络情况进行媒体节点分配。例如华北地区考生进入Node01华东地区考生进入Node02或者根据当前连接数进行动态调度。如果某一个节点异常不应该让整个考试场次全部中断。十九、TURN服务器为什么也要重点评估WebRTC环境下部分网络可以通过P2P或正常网络路径建立连接。但在企业防火墙复杂NAT校园网络受限网络某些运营商网络环境中可能需要TURN中继。一旦媒体走TURN视频流量会经过中继服务器。这时候TURN就成为一个典型的带宽型基础设施。如果2000路视频大量走TURN而服务器只有100 Mbps带宽那么无论应用服务器配置多高都解决不了问题。因此正式考试前建议统计TURN Relay比例平均码率峰值码率丢包率RTT断线次数作为压测和正式上线的重要指标。二十、服务器配置不能只看CPU和内存大型在线考试进行容量规划时至少应该同时计算1. 考试业务并发用户QPS答案保存频率交卷峰值。2. 视频视频路数平均码率峰值码率TURN流量。3. 存储单小时录像容量每日考试场次录像保存天数。4. 数据库答题记录日志记录异常事件考试Session。5. 监考端同时拉流数量高清拉流数量监考员数量。6. 网络入口出口公网内网跨地区网络。这六部分必须一起规划。二十一、一个更加现实的1000人双机位架构可以设计为┌──────────────┐ │ Load Balancer│ └──────┬───────┘ │ ┌──────────────────┴─────────────────┐ │ │ Exam Cluster Media Cluster │ │ ┌─────────┼─────────┐ ┌────────┼────────┐ │ │ │ │ │ │ Exam Answer Session Media01 Media02 Media03 Service Service Service │ │ │ │ └─────────┼─────────┘ │ │ ↓ Redis Recording Service │ │ Database ↓ Object Storage │ ↓ Archive Storage同时增加Monitoring Center和Audit Log。最终形成考试业务 媒体监控 录像存储 异常事件 审计日志五条相互关联但又相对独立的链路。二十二、宏远培训考试系统在这种场景下的优势体现在哪里企业采购在线考试系统时很容易比较有没有题库有没有考试有没有摄像头有没有防切屏。但真正到了500人1000人集团统考技能竞赛正式资格考试差异往往体现在系统底层设计。以宏远培训考试系统为例其优势更适合从以下几个层面理解。1. 培训、练习、考试一体化系统不仅处理一场考试还可以把课程学习培训计划在线练习正式考试补考证书个人档案串联起来。2. Exam Session机制能够围绕考生的一次考试建立独立运行状态管理登录设备网络答题时间掉线恢复交卷。3. 答案可靠性与监考分离视频卡顿不应该影响答案保存。监考异常也不应该直接导致答题数据丢失。这对于正式考试非常关键。4. 多维防作弊根据考试等级可以组合人脸核验切屏监控随机组卷题目乱序摄像头第二机位异常抓拍屏幕监控IP限制等策略。5. 监考中心通过考试状态异常人员设备状态监控画面操作处理集中管理考试过程。6. 完整日志证据链能够围绕考生考试过程形成登录记录Exam Session答题记录网络状态摄像头状态异常事件监考操作最终交卷形成可追溯的数据链。这也是企业级考试系统和普通刷题平台之间的重要区别。二十三、真正专业的压测也不能只压登录接口如果正式考试计划1000人双机位。压测至少应该包含以下场景。场景1集中登录1000人在510分钟内进入系统。场景2集中取卷大量用户同时加载试卷。场景3持续自动保存例如30秒或者60秒保存一次答案。场景42000路媒体连接1000人双机位。场景5网络异常随机模拟掉包高延迟断网重连。场景6监考员拉流模拟多个监考员查看异常考生。场景7录像持续写入观察磁盘IO网络存储延迟。场景8集中交卷考试最后5分钟模拟大量用户同时提交。只有这些场景一起测试才能接近真实正式考试。二十四、一个非常重要的设计原则宁可视频降级也不能让答案丢失如果整个系统资源突然出现压力。应该优先保障什么对于在线考试来说优先级应该非常明确最终交卷 答案保存 考试Session 考试页面 异常日志 实时视频清晰度也就是说当资源紧张时可以视频从720P降到480P帧率从15fps降到8fps暂时停止低优先级预览只保存异常片段。但是不能因为视频服务器繁忙导致考生答案无法保存。这也是考试系统架构设计和普通直播平台非常不同的地方。二十五、结语“1000人在线考试”看起来只是一个并发数字。但是一旦加入双机位人脸实时监考录像屏幕监控这个项目就已经不能按照普通Web系统进行估算。1000人双机位意味着的可能是2000路实时视频Gbps级网络带宽数百GB甚至TB级录像大量媒体Session持续录像写入异常恢复监考拉流以及完整考试证据链。所以采购或者建设大型在线考试系统时不应该只问支不支持1000并发更应该继续问1000人双机位同时在线测试过吗平均视频码率是多少网络不好以后能不能自动降级第二机位断线以后如何恢复TURN节点带宽怎么规划录像是大文件还是分片一场考试产生多少录像录像保存多久视频服务器和考试业务服务器是否隔离视频异常以后会不会影响答案保存考试结束以后能不能还原完整异常时间线当这些问题都能够得到明确回答时才说明一个在线考试系统真正开始进入企业级正式考试架构而不是简单地在考试页面上增加两个摄像头。对于宏远培训考试系统而言双机位监考的价值也不只是“多一个摄像头”而是将身份核验、Exam Session、实时监考、异常检测、断线恢复、答案可靠性、录像留证和Audit Log组合成完整的可信考试链路。最终“能不能看到考生。”而是“当1000名考生同时参加正式考试时系统是否仍然稳定、可追溯、可复核。”