MapReduce+Docker:Archer简化Netflix媒体处理

简介: Archer是Netflix的媒体处理引擎,底层是执行MapReduce的各种Docker,在上层跑各种算法。

640?wx_fmt=jpeg


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中一切都以透明方式处理,使用户能够直入算法。


640?wx_fmt=jpeg

图1:来自运行在Archer上的“标题图像选择算法”中的样本


关于我们


我们是来自于媒体云工程团队(MCE)。我们支持高级媒体处理,其中包括媒体代码转换,预告片生成以及用于艺术品的高质量图像处理。我们的计算机农场运行数以万计的EC2实例来处理动态工作负载。计算机饥饿用例的一些示例包括A / B测试,基于镜头编码的目录范围重新编码以及高质量标题图像。我们负责处理媒体计算平台的大规模分布式计算方面,并与编码技术团队密切合作,共同制定媒体标准和编解码器。


我们的历程


在Archer之前,已经可以使用内部开发的媒体处理平台(代号Reloaded)在云中进行分布式媒体处理。尽管它功能强大和灵活性高,但Reloaded平台的开发需要在观察软件开发最佳实践,持续集成(CI),部署编排和分阶段发布培训的同时,仔细设计动态工作流,数据模型和分布式工作线程。虽然这些是为功能推出做出的正确选择,但对于那些只关注其算法的研究人员而言,这其实是一个障碍和干扰。为了获得敏捷性并免受云部署的干扰,我们的用户要尽可能在本地计算机上运行实验。但是该处规模是有限的。他们最终是需要针对大型内容目录运行他们的算法,以获得更好的信号。


我们研究了Apache Spark,Kubernetes和Apache Flink等分布式计算框架。 这些框架均缺少重要功能,如对媒体对象的一流支持,针对每次执行的自定义docker镜像或具有公平资源平衡的多租户群集支持。


640?wx_fmt=png

图2:本地运行大型实验的痛苦


然后我们就意识到,我们可以将Reloaded中的最佳属性与流行的分布式计算框架中的模式相结合,并综合减轻了前面提到的一些困难,提供了一个易于使用的平台,可以为点对点实验,某些确定类型的生产用例进行大规模地运行。


Archer


Archer是一个易于使用的MapReduce样式平台,用于使用容器进行媒体处理,以便用户可以提供其操作系统级别的依赖关系。常见的媒体处理步骤,如挂载视频帧,由该平台处理。开发人员编写三个功能:分割,map和收集; 并且它们可以使用任何一种编程语言。Archer专为简单的媒体处理而设计,这就意味着该平台能够识别媒体格式,并为流行的媒体格式提供“白手套式”处理。例如,ProRes视频帧是Archer中的第一个类对象,并支持将视频源分割为基于镜头的块[1](镜头是相机不移动的视频片段)。


使用Archer可构建许多创新应用程序,其中包括检测由数码相机故障引起的坏点像素的应用程序,使用机器学习标记音频的应用程序以及为字幕执行自动质量控制(QC)的应用程序。后续,我们将会看到更多的应用实例。


640?wx_fmt=gif

图3:运行中的坏点像素检测器[1]


高级视图


从10,000英尺的高度来看,Archer其实拥有多个组件来运行工作。一切均是从REST API开始,来接受工作请求。然后工作流引擎选中请求并驱动MapReduce工作流,将工作调度为优先级队列的消息。应用程序工作线程在队列中进行侦别并执行用户提供的媒体处理功能。考虑到工作的动态性,Archer使用了一个队列感知缩放器来连续移动资源,以确保所有应用程序获得足够的计算资源。 (请参阅@Scale 2017会议上Archer的展示 https://atscaleconference.com/videos/archer-a-distributed-computing-platform-for-media-processing/)。


640?wx_fmt=png


图4:Archer的高级架构


简单操作


通过高效访问云中的大文件,使用任意媒体文件与不可视基础架构进行快速原型设计等功能,使得Archer的简单操作成为可能。


MapReduce风格 - 在Archer中,用户认为他们的处理工作具有三个功能:分割,map和收集。分割功能的作用是将媒体分成更小的单元。map功能将媒体处理算法应用于每个分割之中。收集功能是来自map阶段的结果结合起来。用户可以用他们选择的编程语言或使用内置的语言功能来实现以上三个功能。Archer为常见任务提供了内置功能,例如基于镜头的视频帧分离器和连接收集器。通过仅实现map功能构建应用程序并使用分离器和收集器的内置程序非常常见。而且,Archer用户可以将内置的可重用功能提供给平台。


640?wx_fmt=png

图5:显示MapReduce阶段的示例Archer作业


视频帧作为图像—大多数计算机视觉算法(CV)喜欢使用JPEG / PNG图像来检测复杂的特征,如运动估计和相机镜头检测。视频源格式使用自定义压缩技术来表示原始来源,并且需要进行解码以将源格式转换为图像。为避免需要重复相同的代码来解码视频帧(每种源格式不同),Archer有一项功能,可允许用户在作业提交期间选择图像格式,质量以及裁剪参数。


基于容器的runtime — Archer用户将其应用程序打包为Docker图像。它们以相同的方式在本地或云中运行应用程序。基于容器的本地开发使得用户能够快速地将应用程序转换为工作状态并在此之后又快速迭代,然后,使用一些命令来将应用程序按规模地运行在云中。基于Docker的环境允许用户安装他们选择的操作系统依赖关系,并且每个应用程序可以独立于其他应用程序来选择他们的操作系统依赖关系。例如,在Archer中运行的实验可能会安装FFmpeg等媒体工具的快照版本,并获得快速反馈,而产生式应用将依赖于已发布的版本。Archer使用Titus(Netflix的容器管理平台)大规模运行这些容器。


640?wx_fmt=png

图6:按比例在云中运行相同的操作系统的依赖关系


访问内容目录—大多数Archer应用程序需要访问Netflix内容目录中的媒体源。Archer job API提供了一个内容选择器,用户可以选择他们选择的可播放作为其作业执行的输入。例如,您可以通过仅知道电影ID来针对电影《布莱德》的UHD视频源运行算法。并且,无需担心云中视频源的位置或媒体格式。


本地开发— Netflix的开发者生产力团队已经构建了一个名为Newt(Netflix Workflow Toolkit)的工具来简化本地开发人员的工作流程。Archer使用Newt来提供丰富的命令行界面,此使得本地开发变得简单。开始一个新的Archer作业或下载实验结果仅用一个命令即可。这些命令将本地Docker工作流程以及与Archer作业API的交互进行了包装。另外,使用用户所选择的编程语言来构建应用程序也很容易。


640?wx_fmt=png

图7:本地开发工作流程


Archer助你一臂之力


借助像Archer这样的简单平台,我们的工程师可以在几小时或几天的时间内自由地联想、创作并实现它们。如果没有Archer完成繁杂的任务,我们可能没有尝试过这些创新。我们的用户利用了数千万个CPU小时创建出惊人的应用程序。以下举例:


  • 图像发现—AVA:Netflix的图像发现艺术与科学;

  • 动态优化器— 一种感知视频编码优化框架;

  • 字幕创作— 使用Archer应用程序渲染的镜头更改和烧录文本位置数据用于字幕创作。

  • 最佳图像选择—查找最适合Netflix产品界面中不同画布的图像。

  • 机器辅助的质量控制—于质量控制各个阶段进行辅助。此辅助包括文本检测,音频语言检查以及检测错误视频像素的文本。


640?wx_fmt=png

图8:在字幕创作工具中使用的Archer应用程序生成的镜头更改数据


640?wx_fmt=gif

图9:在Archer平台上运行的文本检测算法


640?wx_fmt=jpeg

图10:运行在Archer上的应用程序挑选的标题图像


640?wx_fmt=jpeg

图11:由Archer启用的插图图像发现


640?wx_fmt=jpeg

图12:为插图自动选择最佳姿势


640?wx_fmt=png

图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


640?wx_fmt=jpeg

相关文章
|
16天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
153 77
|
24天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
2天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
15 4
|
18天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
59 3
|
24天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
63 7
|
24天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
31 5
|
24天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
53 4
|
24天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
56 3
|
24天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
30 2