MapReduce+Docker:Archer简化Netflix媒体处理
Archer是Netflix的媒体处理引擎,底层是执行MapReduce的各种Docker,在上层跑各种算法。Archer可以检测出视频中的图像错误,字幕对关键内容的遮挡等问题。本文来自Netflix的科技博客,由LiveVideoStack摘译整理。
文 / Naveen Mareddy, Frank San Miguel, Mangala Prabhu and Olof Johansson
译 / 王月美
原文:https://medium.com/netflix-techblog/simplifying-media-innovation-at-netflix-with-archer-3f8cbb0e2bcb
想象一下,你正在开发一个快速原型,即通过电影《布莱德》的所有帧来筛选出威尔·史密斯的最佳镜头,并且需带有动感十足的背景。你的目标是以高新人度正确地获得计算机视觉算法,而不必考虑:
并行处理
云计算基础设施,如EC2实例或者Docker容器系统
超高清(UHD)视频源的位置
用于保存结果的云存储API
若过程中途失败,则重试策略
来自办公室的资产重新投资
过去,我们开发人员必须考虑以上包括在内的所有这些事情。正如你所看到的,当目标是简单地获得正确的算法时,这是非常重要的。在此篇博客中,我们将分享我们如何构建一个名为Archer的平台,在Archer中一切都以透明方式处理,使用户能够直入算法。
图1:来自运行在Archer上的“标题图像选择算法”中的样本
关于我们
我们是来自于媒体云工程团队(MCE)。我们支持高级媒体处理,其中包括媒体代码转换,预告片生成以及用于艺术品的高质量图像处理。我们的计算机农场运行数以万计的EC2实例来处理动态工作负载。计算机饥饿用例的一些示例包括A / B测试,基于镜头编码的目录范围重新编码以及高质量标题图像。我们负责处理媒体计算平台的大规模分布式计算方面,并与编码技术团队密切合作,共同制定媒体标准和编解码器。
我们的历程
在Archer之前,已经可以使用内部开发的媒体处理平台(代号Reloaded)在云中进行分布式媒体处理。尽管它功能强大和灵活性高,但Reloaded平台的开发需要在观察软件开发最佳实践,持续集成(CI),部署编排和分阶段发布培训的同时,仔细设计动态工作流,数据模型和分布式工作线程。虽然这些是为功能推出做出的正确选择,但对于那些只关注其算法的研究人员而言,这其实是一个障碍和干扰。为了获得敏捷性并免受云部署的干扰,我们的用户要尽可能在本地计算机上运行实验。但是该处规模是有限的。他们最终是需要针对大型内容目录运行他们的算法,以获得更好的信号。
我们研究了Apache Spark,Kubernetes和Apache Flink等分布式计算框架。 这些框架均缺少重要功能,如对媒体对象的一流支持,针对每次执行的自定义docker镜像或具有公平资源平衡的多租户群集支持。
图2:本地运行大型实验的痛苦
然后我们就意识到,我们可以将Reloaded中的最佳属性与流行的分布式计算框架中的模式相结合,并综合减轻了前面提到的一些困难,提供了一个易于使用的平台,可以为点对点实验,某些确定类型的生产用例进行大规模地运行。
Archer
Archer是一个易于使用的MapReduce样式平台,用于使用容器进行媒体处理,以便用户可以提供其操作系统级别的依赖关系。常见的媒体处理步骤,如挂载视频帧,由该平台处理。开发人员编写三个功能:分割,map和收集; 并且它们可以使用任何一种编程语言。Archer专为简单的媒体处理而设计,这就意味着该平台能够识别媒体格式,并为流行的媒体格式提供“白手套式”处理。例如,ProRes视频帧是Archer中的第一个类对象,并支持将视频源分割为基于镜头的块[1](镜头是相机不移动的视频片段)。
使用Archer可构建许多创新应用程序,其中包括检测由数码相机故障引起的坏点像素的应用程序,使用机器学习标记音频的应用程序以及为字幕执行自动质量控制(QC)的应用程序。后续,我们将会看到更多的应用实例。
图3:运行中的坏点像素检测器[1]
高级视图
从10,000英尺的高度来看,Archer其实拥有多个组件来运行工作。一切均是从REST API开始,来接受工作请求。然后工作流引擎选中请求并驱动MapReduce工作流,将工作调度为优先级队列的消息。应用程序工作线程在队列中进行侦别并执行用户提供的媒体处理功能。考虑到工作的动态性,Archer使用了一个队列感知缩放器来连续移动资源,以确保所有应用程序获得足够的计算资源。 (请参阅@Scale 2017会议上Archer的展示 https://atscaleconference.com/videos/archer-a-distributed-computing-platform-for-media-processing/)。
图4:Archer的高级架构
简单操作
通过高效访问云中的大文件,使用任意媒体文件与不可视基础架构进行快速原型设计等功能,使得Archer的简单操作成为可能。
MapReduce风格 - 在Archer中,用户认为他们的处理工作具有三个功能:分割,map和收集。分割功能的作用是将媒体分成更小的单元。map功能将媒体处理算法应用于每个分割之中。收集功能是来自map阶段的结果结合起来。用户可以用他们选择的编程语言或使用内置的语言功能来实现以上三个功能。Archer为常见任务提供了内置功能,例如基于镜头的视频帧分离器和连接收集器。通过仅实现map功能构建应用程序并使用分离器和收集器的内置程序非常常见。而且,Archer用户可以将内置的可重用功能提供给平台。
图5:显示MapReduce阶段的示例Archer作业
视频帧作为图像—大多数计算机视觉算法(CV)喜欢使用JPEG / PNG图像来检测复杂的特征,如运动估计和相机镜头检测。视频源格式使用自定义压缩技术来表示原始来源,并且需要进行解码以将源格式转换为图像。为避免需要重复相同的代码来解码视频帧(每种源格式不同),Archer有一项功能,可允许用户在作业提交期间选择图像格式,质量以及裁剪参数。
基于容器的runtime — Archer用户将其应用程序打包为Docker图像。它们以相同的方式在本地或云中运行应用程序。基于容器的本地开发使得用户能够快速地将应用程序转换为工作状态并在此之后又快速迭代,然后,使用一些命令来将应用程序按规模地运行在云中。基于Docker的环境允许用户安装他们选择的操作系统依赖关系,并且每个应用程序可以独立于其他应用程序来选择他们的操作系统依赖关系。例如,在Archer中运行的实验可能会安装FFmpeg等媒体工具的快照版本,并获得快速反馈,而产生式应用将依赖于已发布的版本。Archer使用Titus(Netflix的容器管理平台)大规模运行这些容器。
图6:按比例在云中运行相同的操作系统的依赖关系
访问内容目录—大多数Archer应用程序需要访问Netflix内容目录中的媒体源。Archer job API提供了一个内容选择器,用户可以选择他们选择的可播放作为其作业执行的输入。例如,您可以通过仅知道电影ID来针对电影《布莱德》的UHD视频源运行算法。并且,无需担心云中视频源的位置或媒体格式。
本地开发— Netflix的开发者生产力团队已经构建了一个名为Newt(Netflix Workflow Toolkit)的工具来简化本地开发人员的工作流程。Archer使用Newt来提供丰富的命令行界面,此使得本地开发变得简单。开始一个新的Archer作业或下载实验结果仅用一个命令即可。这些命令将本地Docker工作流程以及与Archer作业API的交互进行了包装。另外,使用用户所选择的编程语言来构建应用程序也很容易。
图7:本地开发工作流程
Archer助你一臂之力
借助像Archer这样的简单平台,我们的工程师可以在几小时或几天的时间内自由地联想、创作并实现它们。如果没有Archer完成繁杂的任务,我们可能没有尝试过这些创新。我们的用户利用了数千万个CPU小时创建出惊人的应用程序。以下举例:
图像发现—AVA:Netflix的图像发现艺术与科学;
动态优化器— 一种感知视频编码优化框架;
字幕创作— 使用Archer应用程序渲染的镜头更改和烧录文本位置数据用于字幕创作。
最佳图像选择—查找最适合Netflix产品界面中不同画布的图像。
-
机器辅助的质量控制—于质量控制各个阶段进行辅助。此辅助包括文本检测,音频语言检查以及检测错误视频像素的文本。
图8:在字幕创作工具中使用的Archer应用程序生成的镜头更改数据
图9:在Archer平台上运行的文本检测算法
图10:运行在Archer上的应用程序挑选的标题图像
图11:由Archer启用的插图图像发现
图12:为插图自动选择最佳姿势
图13:由Archer启用的文本遮挡检测
总结
Archher仍处于积极发展的阶段,我们正努力不断扩展其功能和规模。我们对其拥有的经验越多,则实现可能性就越大。以下是我们规划图中的一些项目:
增强多区域支持的稳健性;
通过Netflix内部计算低谷增加规模;
SLA和针对不同用户和应用的容量保证;
对音频源的一流支持(我们已经支持视频);
平台和应用程序之间的运行时间隔离程度更高;
为Python用户丰富开发经验;
在接下来即将发布的博客文章中,我们将撰写安全媒体存储服务,支持Archer和Netflix的其他项目。
虽然Archer平台还是比较新的,待完善与改进的,但是Netflix的许多团队每天正在验证该平台,他们正在采用Netflix产品并在Netflix产品中进行创新。热情和使用频率正在不断增长,以此同时,我们也需要优秀的工程人才。
参考文献
[1] S. Bhattacharya, A. Prakash, and R. Puri, Towards Scalable Automated Analysis of Digital Video Assets for Content Quality Control Applications, SMPTE 2017 Annual Technical Conference, and Exhibition, Hollywood & Highland, Los Angeles, California, 2017

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Docker + Redis 主从环境搭建
环境说明 Docker Ubuntu/CentOS Redis v4.0.10 redis.conf redis.conf是Redis的核心配置文件,默认docker运行的redis是不存在配置文件的,这里可以先从官网下载: wget http://download.redis.io/redis-stable/redis.conf 下面分别介绍是否指定redis.conf来搭建Redis主从。 不指定redis.conf 1. 运行Redis 1.1 master(主库) # 运行服务 docker run -it --name redis-master -d -p 6300:6379 redis redis-server --requirepass masterpassword # 测试连接redis docker exec -it redis-master redis-cli -a <master-password> 1.2 slave(从库) # 运行服务 docker run -it --name redis-slave -d -p 6301:6379 re...
- 下一篇
微服务架构十条最佳实践
确保你在分布式系统中,努力实现这些微服务的最佳实践,例如监控和REST成熟度。 使用微服务架构可以解决所有的软件架构的问题,对吗?当然,这是不对的。但是,使用微服务架构是有价值的。 Hüseyin Babal 最近发表了一个观点,即微服务架构是无法解决所有的问题的。但是,使用微服务架构是构建现代软件架构的坚实基础。在过去的许多年里,我们都知道维护单体应用而带来的挑战,所以 我们寻找一个新的选择来实现可持续,可扩展,易于集成的软件架构。以最佳实践为基础来实现微服务架构可以大幅度的改善你的软件架构。 Hüseyin 是aurea的首席软件架构师和Kloia的咨询师。他最近的演讲,微服务架构终极指南涵盖了他每天工作的大部分的经验和展现了实现微服务架构的最佳实践。 在他的演讲中,它使用Spring Boot来进行应用开发,Consul作为服务发现,Elasticsearrch 和Kibana作为监控,Docker和Jenkins作为持续交付。演讲中包含了十条最佳实践的代码示例演示。 最佳实践1 -- 尝试达到真正的REST 在意识到REST API的好处之后,我们可以查看上图的Leonard ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装