构建在线教育弹性高可用视频处理架构实战

近些年 , 在线教育行业飞速发展 , 为整个社会的知识传播提供了前所未有的便利性 。通过多种形式的在线教育平台 , 学员与教师即使相隔万里也可以开展教学活动 。借助丰富的网络课件 , 学员还可以随时随地的进行学习 , 真正打破了时间和空间的限制 。在各种形式的网络课件中 , 视频课件自然是最直观表现力最丰富的形式 , 因此视频课件的市场占有率也在逐年提升 。
视频处理需求分析对于在线教育领域的视频课件出品方而言 , 每天都要对大量视频内容进行处理 , 下图展示了一个比较典型的场景:

构建在线教育弹性高可用视频处理架构实战

文章插图
 
(1)用户上传一个视频到平台后 , 会先在对象存储中对视频源文件进行暂存 。
(2)平台对视频进行预处理 , 并打上水印 。
(3)平台将视频文件转换为其他格式 , 并对分辨率进行调整 , 以适配各种不同的终端设备的要求 。
(4)将处理好的视频文件保存回对象存储 , 并同步到CDN进行加速 。
虽然从流程上来讲 , 这个场景比较简单 , 但在技术上的挑战其实是非常大的 。视频课件的原作者来自于在线教育平台的广大用户 , 可能是平台负责内容输出的内部用户 , 也有可能是签约的教师 , 或者是平台认证过的分享型用户 。用户上传视频的操作并没有固定的频率 , 往往集中在几个时间段 , 存在明显的波峰波谷 。在业务高峰期 , 视频处理的需求量非常大 , 有的在线教育企业每天要完成数万个视频的转码工作 。对于负责建设视频处理系统的技术团队而言 , 这样的业务场景就留给了他们一系列的挑战:
(1)如何确保这套系统在业务高峰期的高可用性?
(2)如何让每一个上传的视频尽可能快的处理完?
(3)如何尽可能的降低资源成本?
(4)如何高效率的应对需求的频繁变更?
基于这几个诉求 , 我们结合云计算的特点 , 来分析一下可行的解决方案 。
使用SaaS化的云服务完成视频处理随着各大云计算厂商产品线的不断丰富 , 我们可以很轻松的寻找到开箱即用的方案来解决这类典型的视频处理需求 。以阿里云为例 , 视频点播类产品提供了视频采集、编辑、上传、媒体资源管理、转码处理、视频审核分析、分发加速于一体的一站式解决方案 。
构建在线教育弹性高可用视频处理架构实战

文章插图
【构建在线教育弹性高可用视频处理架构实战】 
对于技术团队而言 , 采用这样的方案不用预先准备任何计算资源 , 甚至不用编写任何代码 , 就能够从无到有拥有一整套视频处理系统 , 完全不用考虑资源规划的问题 。这样的方案非常适合在业务发展初级需要让系统快速上线的场景 。
但随着业务的不断发展 , 开箱即用的SaaS化方案还是存在不少的局限性 , 基于如下的原因 , 大多数的技术团队还是会选择自己建设视频处理系统:
(1)对于之前已经通过FFmpeg技术实现的视频处理服务 , 因为涉及到复杂的业务逻辑 , 很难直接迁移到SaaS化方案上来 。
(2)高阶的视频处理需求必须使用代码来实现:比如音频降噪、插入动态Gif水印、按固定频率截帧等等 。
(3)使用高分辨率的大视频是行业趋势 , 对于超大视频的处理 , 比如10G以上的1080P视频 , 往往需要通过自定义的手段进行计算优化 , 才能保证处理的及时性 。
(4)在很多种场景下 , 自建视频处理系统都会带来明显的成本优势 。
(5)频繁的业务需求变更需要对整套系统进行更精细粒度的迭代管理 , 比如采用金丝雀策略降低新版本发布所带来的风险 。
那么如何建设一套同时具备高性能、高可用性、高灵活性、低成本特点的视频处理系统呢?
基于分布式集群最典型的方案是申请一组云虚拟机 , 在每台虚拟机上部署视频处理应用 , 组建成一个可以水平伸缩的服务集服 。当有新的上频上传的时候 , 可以触发一个处理任务 , 并通过负载均衡或消息队列对任务进行分发 , 接到任务的应用节点负责完成对应的任务 。


推荐阅读