视频云面向海量用户的分布式视频处理技术
来源:互联网 发布:淘宝卖家申诉入口 编辑:程序博客网 时间:2024/06/05 14:07
系统介绍
网易视频云支持面向海量用户的分布式视频处理,包含录制、转码、视频合成、截图等常用的视频处理任务。一方面视频云承载了众多网易内部视频应用的后台视频处理,一方面也渐渐以公有云的身份走入大家视野。
在过去几年,视频云为网易内部视频应用提供了稳定可靠的大规模音视频处理服务,如青果、云音乐、教育产品。近两年,随着公有云服务模式趋于成熟,网易视频云渐渐以公有云的身份被大家所了解,与私有云相比,公有云的视频云要面临以下两个挑战:
1. 海量用户
2. 资源超售
在内部服务时代,视频云需要服务的应用数量有限,调度系统和回调系统压力较小,而且可以为一些应用定制特殊功能。而在公有云服务中,面向海量企业用户,调度系统承担的压力更重,在保障公平调度的基础上,需要实现调度能力的水平扩展。
在为内部应用提供服务时,为了保障各个应用的服务质量,一般不做处理资源超售,但是在公有云中,由于用户太多,资源闲置是一种常态,不超售会造成极度的资源浪费。因此,在保障公有云的服务质量前提下,最大限度的节约成本是视频云在公有云场景下需要攻克的重要课题之一。为了做好这一点,公有云提供了比以前更加细致的任务统计,资源监控,便于公有云的容量规划。
系统架构
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会独立开源。
灵活的调度模式
视频云视频处理系统有在线和离线调度器两种不同调度子系统,在线调度器适用于录制、截图以及在线视频合并等在线视频处理。这种任务的特点是具有很强的时效性,需要实时调度。例如录制任务,如果调度产生较大延迟,会导致录制内容丢失。
离线调度器适用于各种类型的转码业务,特点是任务可以积压,可以慢慢异步消费。如点播系统的视频转码,一个用户可以一次性提交很多待转码视频,只要在一个笼统的时间范围内完成即可,无需所有任务实时调度。
离线调度器是视频云超售的基础,因为只有允许一定的任务积压,才能在保证服务可靠的前提下节约资源成本。
租约与高可用
通过租约机制,可以实现不同组件的元数据同步,调度器的水平扩展和主从模式等。
负载均衡
一个视频处理集群中,可以部署多个worker group,任务参数中可以指定在哪个worker group中执行,worker group的划分使视频云可以在容量规划中因地制宜,例如录制任务需要大量的IO操作,因此录制任务的worker group需要配备SSD和千兆网络,而录制过程几乎不会耗CPU资源,可以在CPU配备上节约成本,而转码任务反之。
在一个worker group内,任务调度在没有超过worker slot上限的前提下,采用取模哈希的方式满足负载均衡,当worker调度到的任务数到达slot上限,会从调度器中剔除,直到新的slot空闲出来。
网易视频云支持面向海量用户的分布式视频处理,包含录制、转码、视频合成、截图等常用的视频处理任务。一方面视频云承载了众多网易内部视频应用的后台视频处理,一方面也渐渐以公有云的身份走入大家视野。
视频云的视频处理子系统需求模型如下所示:
在过去几年,视频云为网易内部视频应用提供了稳定可靠的大规模音视频处理服务,如青果、云音乐、教育产品。近两年,随着公有云服务模式趋于成熟,网易视频云渐渐以公有云的身份被大家所了解,与私有云相比,公有云的视频云要面临以下两个挑战:
1. 海量用户
2. 资源超售
在内部服务时代,视频云需要服务的应用数量有限,调度系统和回调系统压力较小,而且可以为一些应用定制特殊功能。而在公有云服务中,面向海量企业用户,调度系统承担的压力更重,在保障公平调度的基础上,需要实现调度能力的水平扩展。
在为内部应用提供服务时,为了保障各个应用的服务质量,一般不做处理资源超售,但是在公有云中,由于用户太多,资源闲置是一种常态,不超售会造成极度的资源浪费。因此,在保障公有云的服务质量前提下,最大限度的节约成本是视频云在公有云场景下需要攻克的重要课题之一。为了做好这一点,公有云提供了比以前更加细致的任务统计,资源监控,便于公有云的容量规划。
系统架构
视频云的视频处理系统架构如下图所示:
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和其他组件通过租约的方式实现元数据同步和高可用,以离线调度器高可用为例,如下图所示:
通过租约机制,可以实现不同组件的元数据同步,调度器的水平扩展和主从模式等。
负载均衡
一个视频处理集群中,可以部署多个worker group,任务参数中可以指定在哪个worker group中执行,worker group的划分使视频云可以在容量规划中因地制宜,例如录制任务需要大量的IO操作,因此录制任务的worker group需要配备SSD和千兆网络,而录制过程几乎不会耗CPU资源,可以在CPU配备上节约成本,而转码任务反之。
在一个worker group内,任务调度在没有超过worker slot上限的前提下,采用取模哈希的方式满足负载均衡,当worker调度到的任务数到达slot上限,会从调度器中剔除,直到新的slot空闲出来。
0 0
- 视频云面向海量用户的分布式视频处理技术
- 视频云面向海量用户的分布式视频处理技术
- Hadoop海量视频、图像分析分布式处理总结
- Hadoop海量视频、图像分析分布式处理总结
- Hadoop海量视频、图像分析分布式处理总结
- Hadoop海量视频、图像分析分布式处理总结
- 网易视频云:分布式视频处理集群中的作业调度
- 网易视频云:分布式视频处理集群中的作业调度
- 嵌入式 云架构海量视频处理jrm服务器编译
- 视频处理技术
- 一些新的视频处理技术
- 视频处理技术的知识体系
- 网易视频云:分布式存储复制技术-链式复制
- UML视频第二部分的总结之面向对象技术
- 视频后处理技术deinterlace
- 面向海量级的分布式服务设计
- 淘宝网分布式存储技术视频
- 网易视频云:浅谈视频通信技术的发展
- 淘宝架构框架
- Spring Boot中使用Redis数据库
- Java反射机制总结二
- provider: Shared Memory Provider, error: 40 - 无法打开到 SQL Server 的连接
- 实习总结2
- 视频云面向海量用户的分布式视频处理技术
- Tensorflow从文件读取数据
- 封装iframe对象为jquery 对象
- lua脚本调用redis生成流水号
- leetcode(27).107. Binary Tree Level Order Traversal II
- IOS 仿微信聊天界面
- matlab之plot
- PHP中的类型转换规则
- 数据结构实验之查找二:平衡二叉树