首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Netflix如何通过重构视频Gatekeeper提升内容运营效率?

Netflix如何通过重构视频Gatekeeper提升内容运营效率?

作者头像
LiveVideoStack
发布于 2019-08-23 07:11:39
发布于 2019-08-23 07:11:39
6560
举报
文章被收录于专栏:音视频技术音视频技术

Gatekeeper是Netflix的视频内容评估管理平台,可以展示视频剧集的metadata,如合同信息、字幕、标题、内容分级等。但此前,运营人员无法通过Gatekeeper实时更新剧集信息,本文将介绍新的gatekeeper架构,以及因此获得的收益。

文 / Drew Koszewnik
译 / John
原文 https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00
此文将与您分享我们的内容设置工程团队如何使用基于Netflix OSS技术的,被称为“Hollow”的Java库与工具包,简化并重新构建内容传输基本组件的历程———这段经历带给我们产业价值方面的收获,令我们受益匪浅。
上下文
Netflix平台上的每部电影与电视节目都经过精心策划以确保观众可以收获最佳观看体验,负责此策划展示的团队是“Title Operations”(标题运营)团队。此团队负责运营并确保以下事项无误:

● 视频内容遵守合同或协议 - 视频拥有正确的日期范围与可被公开的合理标题。

● 视频带有字幕,字幕与配音正确无误且能够为世界各地的观众带来高质量观看体验。

● 标题名称与概要可供使用和翻译。

● 针对不同国家/地区都有符合当地法律法规的内容分级策略。

当标题满足上述所有内容的最低要求时,我们则允许其在该服务上生效。而Gatekeeper则是Netflix上一套负责评估网站上视频等资产“活跃度”的工具,在得到Gatekeeper的批准之前,此视频的标题不会对任何成员可见———如果此标题无法通过验证,那么系统将会通过指出其相对于基准用户体验缺少的内容,协助内容生产者重新考虑更加合适的标题。
Gatekeeper通过聚合来自多个上游系统的数据并结合应用一些业务逻辑,针对不同国家/地区背景,为每个视频内容生成详细说明,从而帮助内容生产者针对不同地区生产最符合当地用户观看习惯的视频内容作品。
技术原理
Hollow 是我们几年前 发布 的一套基于 OSS 的技术,准确地来说这是一个完整的高密度近缓存(high-density near cache),其具备以下三个特性:

● 一体化:整个数据集缓存在每个节点上,不存在驱逐策略且没有处于空闲状态的缓存。

● 高密度:采用编码、位打包(bit-packing)和复制数据删除(deduplication techniques)技术来优化数据集的内存占用率。

● 就近存储:缓存存在于需要访问数据集的任何RAM中。

这里我想强调一下此技术的重要特性之一——“一体化”。“一体化”意味着我们不必担心交换内存中的记录,同时可以进行诸如假设和预计算数据集的内存表示等,脱离“一体化”就不可能实现的功能,我们期待的最终结果是这些数据集能更有效地使用RAM。然而,对于传统的局部缓存解决方案,我们需要知道此方案是否可以只缓存数据集的5%,或者缓存是否需要为数据集10%预留足够的空间,从而确保命中/未命中率符合相应要求——如果内存量相同,则可以缓存100%的数据,命中率也可被设置并达到100%。
显然,如果想要获得100%的命中率,我们需要消除访问数据所需的所有I / O ,同时尽可能实现更高效的数据访问,这无疑为我们带来了许多可能性。
亟待解决的现状
直到最近,Gatekeeper才成为一个完全的事件驱动系统。当视频在其任何一个上游系统中被更改时,该系统将向Gatekeeper发送此事件。
Gatekeeper对于此事件的响应是访问其每个上游服务并收集必要的输入数据以评估视频及其相关资产的活跃度;随后Gatekeeper将产生一个单记录输出用以详细说明该单个视频的状态。
旧版本的Gatekeeper架构
我们需要明确与此模型相关的几个问题:

● 此过程完全受I / O限制,同时会对上游系统施加大量负载。

● 因此,这会导致这些队列中的事件将一直处于排队状态并出现处理过程的延迟,继而导致标题可能无法按时正常上线。

● 更糟糕的是,个别事件有时会被遗漏。这意味着在标题运营团队的某位成员意识到这些问题之前,标题可能根本不会生效。

解决这些问题的方法是“扫描”目录,以便将符合特定标准的视频事件(例如:计划下周发布)自动加入处理队列。不幸的是,此方法会将更多的事件添加到队列当中,这无疑加剧了问题的严重。
建设性想法
我们决定采用全高密度近缓存(即Hollow)来消除这一I / O方面的瓶颈。对于每个上游系统,我们将创建一个Hollow数据集,其中包含Gatekeeper执行对其评估所需的所有数据。这样,每个上游系统都能负责更新其缓存。
新的Gatekeeper架构
利用该模型,我们可以从概念上将活跃性评估与上游系统的数据检索两大过程分离开来。Gatekeeper不会直接对事件作出反应,而是在一个重复的周期内,连续地评估所有国家所有视频中所有资产的活跃性。此循环迭代将涉及Netflix上的每个可用视频,同时系统也将计算每个视频的活跃度细节。在每个周期结束时,Gatekeeper会生成一个完整的输出(也是一个空数据集)用以表示所有国家所有视频的活跃状态细节。
我们期待实现这样一个“连续处理”模型,因为完全消除I/O瓶颈意味着我们能够更有效地控制数量级。我们认为,这种模式能为我们带来更多产业价值方面的收获:

● Gatekeeper可生成一套针对上游系统超额负载的明确解决方案

● 事件处理延迟会被完全消除,内容生产者不用担心标题错过上线日期。

● 有效减少内容运营工程团队在处理与性能相关的问题上所花费的时间。

● 改进了可调试性和活跃度处理的可见性。

随之而来的问题
Hollow更像是一台“时间机器”。在数据集随时间变化的同时,Hollow会通过将时间线分解为一系列(离散数据状态),以便于将这些更改传递给消费者。每个(数据状态)表示特定时刻整个数据集的快照。

Hollow就像一台时间机器

通常情况下,Hollow数据集的使用者会加载最新的数据状态,并在生成新状态时保持其缓存更新。但是,使用者可能会指向先前状态,并将整个数据集的视图恢复至过去某个时间点。
生成数据状态的传统方法是维护运行一个重复“循环”的单个生产者。在一个“循环周期”中,内容生产端会迭代所有源自真实来源的记录。当迭代进行时,系统将每个记录添加到Hollow库中。随后Hollow计算在此周期中添加的数据与上一个周期中添加的数据之间的差异,并将状态发布到消费者已知的位置。

传统的Hollow用法

这种全真实迭代模型的问题在于其所花费的时间十分漫长。对于一些上游系统来说可能需要数小时。如此夸张的数据传播延迟是不可被接受的——例如,如果标题运营者需要为即刻上线的电影添加评级,那么他们则需要为正在进行的实时处理耗费数小时的等待时间。
改进策略
我们需要的是一台更快的时间机器——一台具备更高处理效率的机器,只有这样消费者才能切身体验到技术带来的直观优化感受。

增量Hollow就像一台更快的时间机器

为了实现这一目标,我们首先创造了必要的增量Hollow基础组件以充分利用早期Hollow的库与工具包,并将其作为一个公共的非测试API,率先用于流媒体平台团队。
使用此基础组件,每当系统在源应用程序中检测到更改时,更新的记录都会被编码并发送到Kafka的Topic。而那些不属于源应用程序的新组件“Hollow 增量生产者”服务则会以预先定义好的节奏执行重复循环。在每个循环期间,此组件会读取来自上一个循环并已添加到主题的所有消息,同时改变Hollow状态引擎以反映更新记录的新状态。
如果来自Kafka Topic的消息中包含与Hollow数据集中已反映的部分完全相同的数据,则不执行任何操作。
Hollow增量生产服务
为了解决事件错过引起的一系列问题,我们实现了一个可周期性迭代的针对整个源数据集的扫描机制。在迭代时,系统将记录下的每条内容发送到Kafka Topic。这就使得任何可能遗漏的更新最终都会反映在Hollow数据集中。此外,由于这不是将更新传递至Hollow数据集的主要机制,其也不必如上文提到的用于传统Hollow的迭代源那样,快速或频繁地进行循环过程。
Hollow增量生成器能够从Kafka Topic中读取大量消息并在内部快速改变其Hollow状态,这也就是为什么我们可以将其循环的时间配置得非常短(我们目前将此默认为30秒)。
这就是我们构建更快时间机器的整个过程。现在,如果标题运营人员需要在即将上线的电影中快速添加电影等级,那么在30秒内该数据即可实现在相应的Hollow数据集中可用。
触手可及的成果
随着数据传播延迟问题得到了妥善解决,我们能够基于全新的Gatekeeper系统消除所有I / O边界。通过Gatekeeper的预判和决策,我们得以重新评估所有国家/地区中所有视频的所有资产,而这一切在此之前都是不可想象的——以往条件下这些工作会占用整个内容传输通道超过一周的时间,而现在只需大约30秒即可完成;与此同时,事件被错过或评估被延迟也成为了历史,而先前Gatekeeper系统被禁用也减少了我们上游系统的负载,在某些情况下甚至降低了80%。

显著减少上游系统的负载

除了以上性能参数上的优势之外,我们还获得了弹性优势。在先前的Gatekeeper系统中,如果其中一个上游服务出现故障,由于无法从该系统检索到任何数据,我们根本无法评估活跃性情况;而新Gatekeeper系统下,如果其中一个上游系统出现故障,尽管该系统会影响数据的实时发布,但我们仍能够为相应的数据集提供旧数据,同时其他所有数据集不会受到影响。例如在电影片场,如果故事大纲的翻译系统出现故障,那么在紧急上载正确的数据之后,我们仍然可以在当前片场继续拍摄电影。
无形的成果
比性能提升更有益的是,我们在该系统中的开发速度得到了显著的提高。以前动辄几天的开发工程现在仅需几分钟即可完成;而在原先的工作流程中,验证与发布可能需要几天或几周的时间,现在我们则利用相同的时间显著提升了发布的质量。
Hollow这一“时间机器”意味着每次使用Hollow作为输入数据的可靠途径,整个过程是100%可重复的。对于Gatekeeper来说,这意味着可以通过将所有输入状态恢复为时间X随后再次重新评估所有内容,从而完成对在时间X时所发生事件的精确重放。
我们利用这些特性,通过快速迭代以实现对Gatekeeper业务逻辑的更改。下图展示了我们维护一个PREPROD Gatekeeper的实际案例,PREPROD不断评估整个目录的活动性,同时其输出将会被发布到不同的Hollow数据集。在每个循环开始时,PREPROD环境将从PROD收集最新生成的状态,并将其每个输入数据集设置为与用于生成PROD所输出的完全相同的版本。

instancePREPROD Gatekeeper实际案例:“跟随”PROD实例

当我们想要对Gatekeeper业务逻辑进行更改时,我们会依据上述内容进行调整,然后将其发布到PREPROD集群。而PREPROD之后的输出状态可以与其之前所对应的输出状态区别开,开发者可通过访问PROD精准查看到逻辑改变所导致的精确效果,一目了然。以上工具帮助我们验证多项优化带来的改变精准符合预期,同时不会造成其他任何意想不到的不良影响。

Hollow产生的差异与确切的变化可以被直观看到

与部署过程的一些迭代相结合,上述一系列改进使我们的团队能够在几分钟内实现对Gatekeeper编码的关键性调整,同时完成验证、部署等一系列关键步骤,其不仅带来了一个数量级的速度提升,还让架构的整体安全性达到了前所未有过的高度。
结论
Gatekeeper系统的上述一系列改进措施,为我们收获额外的业务价值提供了机会,我们计划在未来几个季度实现这一目标。此外,这种模式可以被复制到内容工程领域等Netflix其他系统,我们也已经启动了多个后续项目从而正式化充分利用n-hollow-input架构的优势。
内容运营工程现在进入了一个崭新的发展阶段,特别是当我们扩展了我们的工作流程之后,我们得以借同样的时间生产出比以往单位时间内所能产出的更多内容。这也让我们有更多机会解决实际问题并发掘业务背后隐藏的巨大价值:借计算机科学的力量,开拓技术无限可能。

LiveVideoStack 招募

LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒体技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。同时,也欢迎你利用业余时间、远程参与内容生产。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
新版本已经支持这两种标记了,本文已无意义
新版本已经支持这两种标记了,本文已无意义
回复回复点赞举报
推荐阅读
如何用matlab画稍微美观点的图
本科毕设论文写作过程中,老师指出我用matlab画的图太丑,需要好好改改。于是我这几天参考网上资料,对画图的一些细节进行了设置,得到的图确实比以前好了些。而且我matlab用的不多,很多东西这次用过,下次碰可能要过很长时间,许多之前记得的东西都忘了,所以写下来是很有必要的。另外我现在画的图也只是比之前稍微好点,所以就起了这样一个题目。
王云峰
2019/12/25
1.6K0
Matlab画图线型、符号及颜色设置
-Solid line (default) – Dashed line : Dotted line -. Dash-dot line
全栈程序员站长
2022/09/03
3.5K0
Matlab画图线型、符号及颜色设置
Matlab画图常用的线条符号、颜色
4 、若要同时改变颜色及图线型态(Line style),也是在坐标对后面加上相关字串即可
全栈程序员站长
2022/07/01
3K0
Matlab中的画图函数
之前在进行Matlab编程时,画图总是非常重要的一部分,在这里整理一下常用的绘图函数,以作备用。
全栈程序员站长
2022/11/06
3.8K0
Matlab中的画图函数
【MATLAB 从零到进阶】day6 MATLAB绘图与可视化
图形窗口、线条、曲面和注释等都被看作是MATLAB中的图形对象,所有这些图形对象都可以通过一个被称为“句柄值”的东西加以控制,例如可以通过一个线条的句柄值来修改线条的颜色、宽度和线型等属性。这里所谓的“句柄值”其实就是一个数值,每个图形对象都对应一个唯一的句柄值,它就像一个指针,与图形对象一一对应。例如可以通过命令h = figure返回一个图形窗口的句柄值。
Ai学习的老章
2019/04/10
8420
【MATLAB 从零到进阶】day6 MATLAB绘图与可视化
MATLAB快速入门----处理图形对象
当调用绘图函数时,MATLAB® 使用各种图形对象(例如,图窗窗口、轴、线条、文本等)创建图形。每个对象都具有一组固定的属性,您可以使用这些属性控制图形的行为和外观。
巴山学长
2019/07/15
1.3K0
MATLAB快速入门----处理图形对象
matlab的三维绘图和四维绘图「建议收藏」
光照是利用方向官员照亮物体的技术,这项技术能使表面微妙的差异更容易看到,光照也能用来对三维的图像增加现实感。
全栈程序员站长
2022/11/10
6.8K0
matlab的三维绘图和四维绘图「建议收藏」
Matlab系列之绘图基础
介绍下本篇文章将要介绍的东西吧,之所以把本篇称为图形基础,是因为本篇的内容更多的是对图形句柄、图形对象等等之类的相关知识进行说明,对于图形的绘制会在之后的篇章中再详细弄下,比如二维的图怎么画,三维的又该如何绘制;虽然本篇内容趋于基础性的知识,但这也只是相对于之后的图形绘制,是基础的东西。实际上,对于很多没有仔细学过MATLAB的人来说,对本篇将记录的内容其实都不曾注意,甚至不曾耳闻,所以本篇的重要性也是显然的,慢慢看吧~
狂人V
2021/01/22
1.4K0
Matlab学习
此 MATLAB 函数 清除命令行窗口中的所有文本,让屏幕变得干净。运行 clc
裴来凡
2022/05/29
1.4K0
Matlab学习
看这个就够了——用程序实现各类优美的图形大全
大数据时代,数据分析与报告中少不了做图表。matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。Matplotlib则比较强:Matlab的语法、python语言、latex的画图质量(还可以使用内嵌的latex引擎绘制的数学公式)。
机器思维研究院
2019/10/22
1.1K0
看这个就够了——用程序实现各类优美的图形大全
一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介
本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!
演化计算与人工智能
2020/08/14
5880
一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介
matlab绘图(五)
过冷水有段时间没有和大家分享MATLAB的编程知识了,皆因懒。本期给大家分享一点关于绘图的小技巧,经常有朋友让我帮忙绘图,感觉在我这里是小事,在他们那就是很特别的技能,有时候朋友的特殊绘制要求,也让我犯难。现将自己平时的绘图经验做个小结,主要是关于matlab绘图的一些注意点——公式输入、多轴绘图、交点标记、箭头绘制,通过实际案例给大家讲讲具体的使用。
巴山学长
2020/02/17
1.2K0
matlab绘图(五)
matlab plot函数详解_MATLAB的plot
NO.3 绘制横轴为X,竖轴为Y的多组二维线图,Y值与X值一一对应,所有线条都使用相同的坐标区。
全栈程序员站长
2022/11/03
2K0
matlab plot函数详解_MATLAB的plot
matlab中plot函数的功能及用法_plot绘制什么图
本文转自http://blog.sina.com.cn/s/blog_d8f783c90102woqb.html
全栈程序员站长
2022/11/03
3.7K0
matlab中plot函数的功能及用法_plot绘制什么图
Matlab绘图方法整理(超完整版)
二维图像是我们在学习过程中经常会接触到的图像,比如在做数学题目时随手画出的一个正弦曲线,这个图像往往是我们根据它的函数做出来的,事实确是这样,在我们学习过程中画出来的每一个图像几乎都是函数,反过来说,每一个函数都对应着它自己的图像,我们能画出来的二维图像往往是一个一元函数即二元方程,在Matlab中做二维图像也是这样,我们根据一个函数来画出它的图像,不过要注意的一点是,在Matlab画图的过程中,它并不认识你给出的那个函数,它要做的仅仅是把你给出的函数上的点连成线而已。
全栈程序员站长
2022/09/07
2.6K0
Matlab绘图方法整理(超完整版)
教程合集 | MATLAB绘图基本操作与属性
周一到!从本周开始,我们一起来学习关于绘图的操作吧!之前学过了如何从文件中读取数据,有的小伙伴可能着急了,怎么学了这么久,还是不会画图呀?!今天我们从MATLAB基本图形的绘制开始学习,增强信心,之后再去学烧脑的数据处理内容~
bugsuse
2020/11/06
5.2K0
教程合集 | MATLAB绘图基本操作与属性
MATLAB中的图形绘制
MATLAB的图形通常都是通过描点、连线的方式来实现的。通过提供关键位置的点坐标及点与点之间的具体链接方式实现图形绘制。
技术客
2022/04/21
2.5K0
MATLAB中的图形绘制
Matlab系列之三维图形
在Matlab中,三维图形有:三维曲线、三维网格以及三维曲面,分别对应函数:plot3、mesh和surf,本篇将介绍些常规使用以及一些三维图形的处理。
狂人V
2021/06/29
1.7K0
Matlab绘图(一二三维)
强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。
全栈程序员站长
2022/07/15
2.5K0
【STM32H7的DSP教程】第4章 Matlab简易使用之脚本文件
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第4章   Matlab简易使用之脚本文件 本期教程主要是讲解Mat
Simon223
2020/04/03
6160
【STM32H7的DSP教程】第4章   Matlab简易使用之脚本文件
相关推荐
如何用matlab画稍微美观点的图
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 文 / Drew Koszewnik
  • 译 / John
  • 原文 https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00
  • 此文将与您分享我们的内容设置工程团队如何使用基于Netflix OSS技术的,被称为“Hollow”的Java库与工具包,简化并重新构建内容传输基本组件的历程———这段经历带给我们产业价值方面的收获,令我们受益匪浅。
  • 上下文
  • Netflix平台上的每部电影与电视节目都经过精心策划以确保观众可以收获最佳观看体验,负责此策划展示的团队是“Title Operations”(标题运营)团队。此团队负责运营并确保以下事项无误:
  • 当标题满足上述所有内容的最低要求时,我们则允许其在该服务上生效。而Gatekeeper则是Netflix上一套负责评估网站上视频等资产“活跃度”的工具,在得到Gatekeeper的批准之前,此视频的标题不会对任何成员可见———如果此标题无法通过验证,那么系统将会通过指出其相对于基准用户体验缺少的内容,协助内容生产者重新考虑更加合适的标题。
  • Gatekeeper通过聚合来自多个上游系统的数据并结合应用一些业务逻辑,针对不同国家/地区背景,为每个视频内容生成详细说明,从而帮助内容生产者针对不同地区生产最符合当地用户观看习惯的视频内容作品。
  • 技术原理
  • Hollow 是我们几年前 发布 的一套基于 OSS 的技术,准确地来说这是一个完整的高密度近缓存(high-density near cache),其具备以下三个特性:
  • 这里我想强调一下此技术的重要特性之一——“一体化”。“一体化”意味着我们不必担心交换内存中的记录,同时可以进行诸如假设和预计算数据集的内存表示等,脱离“一体化”就不可能实现的功能,我们期待的最终结果是这些数据集能更有效地使用RAM。然而,对于传统的局部缓存解决方案,我们需要知道此方案是否可以只缓存数据集的5%,或者缓存是否需要为数据集10%预留足够的空间,从而确保命中/未命中率符合相应要求——如果内存量相同,则可以缓存100%的数据,命中率也可被设置并达到100%。
  • 显然,如果想要获得100%的命中率,我们需要消除访问数据所需的所有I / O ,同时尽可能实现更高效的数据访问,这无疑为我们带来了许多可能性。
  • 亟待解决的现状
  • 直到最近,Gatekeeper才成为一个完全的事件驱动系统。当视频在其任何一个上游系统中被更改时,该系统将向Gatekeeper发送此事件。
  • Gatekeeper对于此事件的响应是访问其每个上游服务并收集必要的输入数据以评估视频及其相关资产的活跃度;随后Gatekeeper将产生一个单记录输出用以详细说明该单个视频的状态。
  • 旧版本的Gatekeeper架构
  • 我们需要明确与此模型相关的几个问题:
  • 解决这些问题的方法是“扫描”目录,以便将符合特定标准的视频事件(例如:计划下周发布)自动加入处理队列。不幸的是,此方法会将更多的事件添加到队列当中,这无疑加剧了问题的严重。
  • 建设性想法
  • 我们决定采用全高密度近缓存(即Hollow)来消除这一I / O方面的瓶颈。对于每个上游系统,我们将创建一个Hollow数据集,其中包含Gatekeeper执行对其评估所需的所有数据。这样,每个上游系统都能负责更新其缓存。
  • 新的Gatekeeper架构
  • 利用该模型,我们可以从概念上将活跃性评估与上游系统的数据检索两大过程分离开来。Gatekeeper不会直接对事件作出反应,而是在一个重复的周期内,连续地评估所有国家所有视频中所有资产的活跃性。此循环迭代将涉及Netflix上的每个可用视频,同时系统也将计算每个视频的活跃度细节。在每个周期结束时,Gatekeeper会生成一个完整的输出(也是一个空数据集)用以表示所有国家所有视频的活跃状态细节。
  • 我们期待实现这样一个“连续处理”模型,因为完全消除I/O瓶颈意味着我们能够更有效地控制数量级。我们认为,这种模式能为我们带来更多产业价值方面的收获:
  • 随之而来的问题
  • Hollow更像是一台“时间机器”。在数据集随时间变化的同时,Hollow会通过将时间线分解为一系列(离散数据状态),以便于将这些更改传递给消费者。每个(数据状态)表示特定时刻整个数据集的快照。
  • 通常情况下,Hollow数据集的使用者会加载最新的数据状态,并在生成新状态时保持其缓存更新。但是,使用者可能会指向先前状态,并将整个数据集的视图恢复至过去某个时间点。
  • 生成数据状态的传统方法是维护运行一个重复“循环”的单个生产者。在一个“循环周期”中,内容生产端会迭代所有源自真实来源的记录。当迭代进行时,系统将每个记录添加到Hollow库中。随后Hollow计算在此周期中添加的数据与上一个周期中添加的数据之间的差异,并将状态发布到消费者已知的位置。
  • 这种全真实迭代模型的问题在于其所花费的时间十分漫长。对于一些上游系统来说可能需要数小时。如此夸张的数据传播延迟是不可被接受的——例如,如果标题运营者需要为即刻上线的电影添加评级,那么他们则需要为正在进行的实时处理耗费数小时的等待时间。
  • 改进策略
  • 我们需要的是一台更快的时间机器——一台具备更高处理效率的机器,只有这样消费者才能切身体验到技术带来的直观优化感受。
  • 为了实现这一目标,我们首先创造了必要的增量Hollow基础组件以充分利用早期Hollow的库与工具包,并将其作为一个公共的非测试API,率先用于流媒体平台团队。
  • 使用此基础组件,每当系统在源应用程序中检测到更改时,更新的记录都会被编码并发送到Kafka的Topic。而那些不属于源应用程序的新组件“Hollow 增量生产者”服务则会以预先定义好的节奏执行重复循环。在每个循环期间,此组件会读取来自上一个循环并已添加到主题的所有消息,同时改变Hollow状态引擎以反映更新记录的新状态。
  • 如果来自Kafka Topic的消息中包含与Hollow数据集中已反映的部分完全相同的数据,则不执行任何操作。
  • Hollow增量生产服务
  • 为了解决事件错过引起的一系列问题,我们实现了一个可周期性迭代的针对整个源数据集的扫描机制。在迭代时,系统将记录下的每条内容发送到Kafka Topic。这就使得任何可能遗漏的更新最终都会反映在Hollow数据集中。此外,由于这不是将更新传递至Hollow数据集的主要机制,其也不必如上文提到的用于传统Hollow的迭代源那样,快速或频繁地进行循环过程。
  • Hollow增量生成器能够从Kafka Topic中读取大量消息并在内部快速改变其Hollow状态,这也就是为什么我们可以将其循环的时间配置得非常短(我们目前将此默认为30秒)。
  • 这就是我们构建更快时间机器的整个过程。现在,如果标题运营人员需要在即将上线的电影中快速添加电影等级,那么在30秒内该数据即可实现在相应的Hollow数据集中可用。
  • 触手可及的成果
  • 随着数据传播延迟问题得到了妥善解决,我们能够基于全新的Gatekeeper系统消除所有I / O边界。通过Gatekeeper的预判和决策,我们得以重新评估所有国家/地区中所有视频的所有资产,而这一切在此之前都是不可想象的——以往条件下这些工作会占用整个内容传输通道超过一周的时间,而现在只需大约30秒即可完成;与此同时,事件被错过或评估被延迟也成为了历史,而先前Gatekeeper系统被禁用也减少了我们上游系统的负载,在某些情况下甚至降低了80%。
  • 除了以上性能参数上的优势之外,我们还获得了弹性优势。在先前的Gatekeeper系统中,如果其中一个上游服务出现故障,由于无法从该系统检索到任何数据,我们根本无法评估活跃性情况;而新Gatekeeper系统下,如果其中一个上游系统出现故障,尽管该系统会影响数据的实时发布,但我们仍能够为相应的数据集提供旧数据,同时其他所有数据集不会受到影响。例如在电影片场,如果故事大纲的翻译系统出现故障,那么在紧急上载正确的数据之后,我们仍然可以在当前片场继续拍摄电影。
  • 无形的成果
  • 比性能提升更有益的是,我们在该系统中的开发速度得到了显著的提高。以前动辄几天的开发工程现在仅需几分钟即可完成;而在原先的工作流程中,验证与发布可能需要几天或几周的时间,现在我们则利用相同的时间显著提升了发布的质量。
  • Hollow这一“时间机器”意味着每次使用Hollow作为输入数据的可靠途径,整个过程是100%可重复的。对于Gatekeeper来说,这意味着可以通过将所有输入状态恢复为时间X随后再次重新评估所有内容,从而完成对在时间X时所发生事件的精确重放。
  • 我们利用这些特性,通过快速迭代以实现对Gatekeeper业务逻辑的更改。下图展示了我们维护一个PREPROD Gatekeeper的实际案例,PREPROD不断评估整个目录的活动性,同时其输出将会被发布到不同的Hollow数据集。在每个循环开始时,PREPROD环境将从PROD收集最新生成的状态,并将其每个输入数据集设置为与用于生成PROD所输出的完全相同的版本。
  • 当我们想要对Gatekeeper业务逻辑进行更改时,我们会依据上述内容进行调整,然后将其发布到PREPROD集群。而PREPROD之后的输出状态可以与其之前所对应的输出状态区别开,开发者可通过访问PROD精准查看到逻辑改变所导致的精确效果,一目了然。以上工具帮助我们验证多项优化带来的改变精准符合预期,同时不会造成其他任何意想不到的不良影响。
  • 与部署过程的一些迭代相结合,上述一系列改进使我们的团队能够在几分钟内实现对Gatekeeper编码的关键性调整,同时完成验证、部署等一系列关键步骤,其不仅带来了一个数量级的速度提升,还让架构的整体安全性达到了前所未有过的高度。
  • 结论
  • Gatekeeper系统的上述一系列改进措施,为我们收获额外的业务价值提供了机会,我们计划在未来几个季度实现这一目标。此外,这种模式可以被复制到内容工程领域等Netflix其他系统,我们也已经启动了多个后续项目从而正式化充分利用n-hollow-input架构的优势。
  • 内容运营工程现在进入了一个崭新的发展阶段,特别是当我们扩展了我们的工作流程之后,我们得以借同样的时间生产出比以往单位时间内所能产出的更多内容。这也让我们有更多机会解决实际问题并发掘业务背后隐藏的巨大价值:借计算机科学的力量,开拓技术无限可能。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档