V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shipinyun2016
V2EX  ›  程序员

网易视频云:面向海量用户的分布式视频处理技术

  •  
  •   shipinyun2016 · 2016-07-26 15:09:06 +08:00 · 1822 次点击
    这是一个创建于 3027 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的 PaaS 服务。在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在在线音视频平台。

    作者:

    1

    系统介绍

    网易视频云支持面向海量用户的分布式视频处理,包含录制、转码、视频合成、截图等常用的视频处理任务。一方面视频云承载了众多网易内部视频应用的后台视频处理,另一方面也渐渐以公有云的身份走入大家视野。视频云的视频处理子系统需求模型如下所示:

    2

    视频云上层服务根据业务模型,向视频处理子系统发起视频处理任务,处理子系统根据任务类型调度到合适的 worker 节点做处理。在任务产生事件时,处理子系统会将事件回调通知给上层服务,如录制切片事件、视频转码完成事件。在过去几年,视频云为网易内部视频应用提供了稳定可靠的大规模音视频处理服务,如青果、云音乐、教育产品。近两年,随着公有云服务模式趋于成熟,网易视频云渐渐以公有云的身份被大家所了解,与私有云相比,公有云的视频云要面临以下两个挑战: 1. 海量用户 2. 资源超售

    在内部服务时代,视频云需要服务的应用数量有限,调度系统和回调系统压力较小,而且可以为一些应用定制特殊功能。而在公有云服务中,面向海量企业用户,调度系统承担的压力更重,在保障公平调度的基础上,需要实现调度能力的水平扩展。

    在为内部应用提供服务时,为了保障各个应用的服务质量,一般不做处理资源超售,但是在公有云中,由于用户太多,资源闲置是一种常态,不超售会造成极度的资源浪费。因此,在保障公有云的服务质量前提下,最大限度的节约成本是视频云在公有云场景下需要攻克的重要课题之一。为了做好这一点,公有云提供了比以前更加细致的任务统计,资源监控,便于公有云的容量规划。

    系统架构

    视频云的视频处理系统架构如下图所示:

    3

    ·sdk :接口层,上层服务通过 SDK 向视频处理系统发起任务和事件回调

    ·scheduler :调度子系统,又分为在线调度器和离线调度器

    ·worker :任务执行器,一般包含 10-1000 个 slot ,每个 slot 对应一个处理任务

    ·notifier :事件回调子系统,收集各个 worker 中的任务事件,并通知 SDK

    ·configserver :集群管理,元数据同步,任务统计和资源监控等

    ·dashboard :可视化运维的 WEB 工具

    以上模块和子系统的实现,满足了视频云对用户管理、任务调度、任务追踪、事件回调和文件存储等核心功能需求。在非功能性方面,视频云实现了调度子系统的高可用和水平扩展, worker 宕机重试。 configserver 在架构中属于单点,通过主从架构实现高可用。

    核心技术

    FlickRpc 框架

    FlickRpc 是视频云团队自主研发的一个通用 rpc 框架,是各个组件模块互相调用和通信的基础。 FlickRpc 采用了 netty 长连接和 json 通信格式,使用 google 的 gson 库实现 json 格式的序列化和反序列化,与 grpc , avro 一类的开源 RPC 框架相比, FlickRpc 无需定义消息格式,可像使用本地方法一样调用 RPC ,并且 FlickRpc 中不存在 json 反序列化与 JAVA 继承的冲突,更加简单易用; FlickRpc 提供了同步调用和异步调用两种模式,可以通过静态上下文获取 RPC 远端信息;虽然 FlickRpc 是为视频云开发,但其本身是一个通用 RPC 框架,可以在任何系统中使用。

    FlickRpc 的使用极大简化了视频云在通信层的开发量,未来 FlickRpc 会独立开源。

    灵活的调度模式

    视频云视频处理系统有在线和离线调度器两种不同调度子系统,在线调度器适用于录制、截图以及在线视频合并等在线视频处理。这种任务的特点是具有很强的时效性,需要实时调度。例如录制任务,如果调度产生较大延迟,会导致录制内容丢失。离线调度器适用于各种类型的转码业务,特点是任务可以积压,可以慢慢异步消费。如点播系统的视频转码,一个用户可以一次性提交很多待转码视频,只要在一个笼统的时间范围内完成即可,无需所有任务实时调度。离线调度器是视频云超售的基础,因为只有允许一定的任务积压,才能在保证服务可靠的前提下节约资源成本。

    租约与高可用

    configserver 和其他组件通过租约的方式实现元数据同步和高可用,以离线调度器高可用为例,如下图所示:

    4

    调度器 A 和调度器 B 负责调度不同用户的离线任务, A 和 B 在启动时会向 configserver 注册,并获取元数据和租约信息,以及他们各自需要调度哪些用户。 A 和 B 每隔一段时间( 5s-60s )会向 configserver 续租,如果 A 在某个时间宕机,一段时间后 configserver 会发现 A 持续多个周期没有续租,为了保障用户调度的高可用, configserver 需要将 A 负责的调度任务交由相邻节点 B 继续执行,为此 configserver 会更新 B 的租约,在下次 B 续租时可以更新到新的租约和元数据,并触发 reload 。通过租约机制,可以实现不同组件的元数据同步,调度器的水平扩展和主从模式等。

    负载均衡

    一个视频处理集群中,可以部署多个 worker group ,任务参数中可以指定在哪个 worker group 中执行, worker group 的划分使视频云可以在容量规划中因地制宜,例如录制任务需要大量的 IO 操作,因此录制任务的 worker group 需要配备 SSD 和千兆网络,而录制过程几乎不会耗 CPU 资源,可以在 CPU 配备上节约成本,而转码任务反之。在一个 worker group 内,任务调度在没有超过 worker slot 上限的前提下,采用取模哈希的方式满足负载均衡,当 worker 调度到的任务数到达 slot 上限,会从调度器中剔除,直到新的 slot 空闲出来。

    更多技术分享,请关注网易视频云官方网站( http://vcloud.163.com/)

    或者网易视频云官方微信( vcloud163 )进行交流与咨询

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2674 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.