点击上方“LiveVideoStack”关注我们
本次LiveVideoStackCon 2021 音视频技术大会 北京站邀请到了新浪微博视频平台架构师——黄阳全,他将为我们介绍微博视频处理系统的架构演进与云原生之路上的探索,为什么选择自建,以及如何实现基于原有基础服务的FAAS平台。为尝试云原生架构模式的开发者提供参考。
文 | 黄阳全
整理 | LiveVideoStack
大家好,我是来自微博视频平台的黄阳全,今天分享的主题是微博视频处理系统云原生之路。
我在2017年加入微博研发中心,负责微博视频基础组件的开发与维护,多次参与了微博视频架构升级,主导了微博视频中台的建设。目前正在建设基于云原生架构的微博视频处理系统。
本次分享主要分为4部分:
1.背景介绍:主要介绍微博视频,微博视频处理系统,微博视频处理系统所包含子模块,以及它的特点;
2.原视频处理系统架构:针对微博视频处理系统所具有的特点,我们设计出基本满足需求的原架构,但是随着业务的发展,逐渐发现了原架构的短板;
3.FaaS平台的探索与实践:针对短板,我们在云原生领域开始了如火如荼的FaaS平台的探索,在原基础服务之上开发出了解决业务痛点的FaaS平台;
4.总结与未来展望。
一、背景介绍
随着4G/5G技术和设备的不断普及,越来越多的用户选择通过视频或者直播来记录生活,传递知识,表达观点。
微博作为一个即时分享平台,视频所占的比例也越来越大,目前微博视频的日发布量已达到百万级,日播放量也早已突破十亿级。
图示为一个微博视频从生产到消费经历的整条链路:
首先视频创作者从手机、PC等设备上传视频或是开启直播,视频处理服务接收请求后进行视频的处理。处理完成且审核通过后,视频发布,最后用户能通过播放服务看到视频。
下面放大视频处理服务部分(黄色部分)。
视频处理系统包含四个子模块:视频转码,视频内容理解,直播录制和转码实验室
1、视频转码:对于用户上传的视频,我们需要将视频转码成不同的清晰度(1080p、720p等),以满足不同场景下用户的播放需求。对于用户来说,上传后视频越快发出,体验越好,所以视频转码有速度要求。另外视频微博的上行有热点特性,需要有较好的峰值应对能力。
2、视频内容理解:负责提取视频中的内容信息,转换成结构化数据,助力于业务发展。内容理解具有资源多样,算法多样,服务多样的特性。
3、直播录制:从源站拉取直播流,转码后的视频存储到文件服务,以供用户点播观看。
4、转码实验室:顾名思义,是各种转码算法、图像算法、内容理解算法的试验田。转码实验室是离线处理任务,对实时性要求不高,可能白天需要验证的算法,晚上跑,第二天能得出结果就可以。
综上所述,微博视频处理系统具有大流量、实时性、核心服务、峰值明显、在线/离线同时存在、资源多样的特点。
二、原视频处理系统
对于视频转码来说,保证转码的效率是至关重要的。
这是一个整文件转码和分片转码的对比示意图,整文件转码分为下载、转码,上传。分片转码将下载好的视频分片后并行处理,从而提高转码速度,可以看到分片转码速度远优于整文件转码速度,特别是转码大视频文件时,这也是业内通用的解决方案。
但是分片转码也带来了新的挑战:
1、流程编排复杂:如果采用传统的编码方式进行分布式分片并行转码是比较困难的,另外还要考虑失败超时重试等情况,整个流程会非常复杂。
2、高并发,低延迟:在微博的场景下,结合前面讲到的微博视频的特点,我们还有高并发低延迟的挑战。
有的同学会疑惑,视频上传这种上行接口大概是几百qps,怎么会达到高并发?这里解释一下,假如微博的上传qps是100,一个视频分成100个分片,需要转出10个label的清晰度,那么系统内部需要承载的qps将被放大到10w。
为了解决这两个问题,我们开发出了流程编排引擎和高性能的调度器。
首先是DAG有向无环图的框架和Olympiadane。我们采用与Java亲和度比较高的Grovvy定义DAG流程。
这是DAG编排后的分片转码流程图,每一个task(绿色节点)是一个单独的实现类,以此解耦流程和任务,DAG还提供重试重做,可视化的功能。
有了流程的编排,还需要将任务下发到机器上执行,于是我们开发了TaskScheduler任务调度器。
任务调度器采用任务优先级队列和机器优先级队列相结合的方式