图片来源/Netfllix
影音串流龙头Netflix在去年12月,突然发布了一份史无前例的收视资料,吸引了全球影视产业的目光。16年来的第一次,Netflix公布了全球2.4亿用户的收看大数据。
从这份收视报告,可以看到几个惊人的数据,Netflix在去年1月到6月期间播放的影片,高达1万8千4百部多影片,包括了系列影集和单部的电影,统计时间从总收看时数,超过了1,000亿小时,平均每个用户在半年内看了420小时,平均一天2.3小时。
每一部影片的收看时数都超过了5万小时,其中99%的影片,也就是有18,214部的播放时数都超过了10万小时。
第一名「 暗夜情报员」第一季累计达到8.12亿小时。台剧第一名则是4,560万小时的「模仿犯」,全球排名341。不只当时新上档的剧集,连2021年播放的「华灯初上」,过了2年,播放时数仍超过150万小时。甚至有一部12年前上映的老电视剧集「 无照律师」,在2023年重新上架到Netflix后,半年创下了1.29亿小时观看时间名列全球第73。
16年来的第一次,Netflix公布了全球2.4亿用户的收看大数据。高达1万8千4百部多影片,去年1月到6月期间的总收看时数超过了1,000亿小时,平均每个用户在半年内看了420小时,平均一天2.3小时。99%的影片,播放时数都超过了10万小时。第一名「暗夜情报员」第一季更累计达8.12亿小时。
台剧第一名则是4,560万小时的「模仿犯」,全球排名341。不只当时新上档的剧集,连2021年播放的「华灯初上」,过了2年,播放时数仍超过150万小时。甚至有一部12年前上映的老电视剧集「 无照律师」,在2023年重新上架到Netflix后,半年创下了1.29亿小时观看时间,名列全球第73。图片来源/Netfllix
首度公布全球收视大数据后,揭露背后资料工程技术架构
就在这份收视报告公布后2天,Netflix也举办了第一次资料工程大会(Netflix Data Engineering Summit 2023),首度公开了他们用来搜集影音大数据背后的资料工程技术架构。
Netflix为了支援全球影音串流,有一套庞大的资料工程基础架构,为了追踪上万部影片的播放成效,Netflix设了一个内容资料工程团队,专门负责将上千亿串流时数的数据,转换成各种分析洞察,让Netflix可以决定怎么推播影片给全球用户。数亿用户透过数千种不同类型装置上的Netflix软体来收看这些影片,产生的事件资讯多达百万种,Netflix设了一个综合追踪团队(Consolidated Logging Team)专门搜集各种Netflix消费者产品和内部应用的事件资讯,将这些资讯汇整成容易理解的合理形式,来支援各种个人化应用和分析的需求。
早在2007年,Netflix在美国推出线上影片串流服务后不久,就开始打造自己的资料仓储系统,从那时就陆续自行研发出许多资料技术和工具,来支持各种资料工程实务上的需求。
Netflix内容资料工程团队资料工程师Chris Stephens在Netflix待了9年,参与了内容绩效评估,观众理解分析、程式化发展战略等领域的发展。回顾过去近10年的资料工程发展,他指出,Netflix资料工程技术架构的核心原则是,要让常见需求更容易进行,而且可以兼顾到不同层级的客制化需求,但是,也因为这些高度客制化的需求,「Netflix有许多工具都得从无到有自己打造。」
Netflix批次处理流程的四大关键步骤
这个资料工程技术架构中最典型的两大资料流程是,批次处理和串流处理,这也是企业常见的两种资料流程。Netflix的批次处理流程中,包括了四个步骤,第一步是资料转换和逻辑汇整(Transform & Agg Logic),Netflix的分析性资料仓储中有数千个资料表,都是采用开源资料表格式Apache Iceberg的资料表,也储存在云端。Apache Iceberg是Netflix在2017年时,由2位工程师自己所开发的大数据技术,隔年开源释出,捐给了Apache软体基金会。
这些Iceberg资料表涵盖了不同业务的需求,从影音串流资料,不同产品功能的互动及路,顾客服务,制片工作室日常运作,到行销数据都有。
在Netflix,大多数批次处理都使用了Apache Spark大数据分析平台,内部的资料工程师社群最常用的Spark绑定机制,包括了SQL、PySpark和Scala这三种,不同资料工程团多半偏好其中一种。但是,Netflix大数据分析平台都会优先支援这三种绑定机制。
为了方便工程师设计各种不同需求的批次流程,Netflix自己设计了一个大数据资料入口网站的Query UI工具,这是他们的资料工程师最常用的工具。这个工具可以检测所要查询的资料表,也能找到这些资料表的相关纪录。查询输入列也具备了自动完成机制,各种函数指令甚至是复杂的巢状结构指令也能自动完成,工程师可以从这个单一入口查询所有资料引擎,包括了Spark、Trino、 Druid、Snowflake上的资料。
另一个资料工程师常用的工具是丛集权重调整工具go/Boost,因为常有人来要求他们,能不能提高各自分析任务的优先程度,资料工程师就会用这个工具暂时调高所用丛集的资源额度。
资料汇整后,接著得检查输入资料的资料品质,Netflix有一套成熟的资料品质生态圈工具,来避免发生垃圾资料产生垃圾分析的窘况,一方面让资料工程师担起更多的资料责任,另一方面也可以让后续的资料使用者,放心使用资料仓储的内容。
Netflix在资料品质控管上,使用了单元测试结合资料稽核,来确保资料的品质,尽可能提供资料集更大的保护,避免浪费资源和时间。
在单元测试工具上,Netflix会采用原生的单元测试函式库,包括了ScalaTest和PyTest,来测试使用者定义的功能。若是Spark的Data Frame API上的功能测试,则用了一套Netflix自己开发的Spark单元测试函式库,还有一款资料流程工具,可以快速从资料仓储拉出资料表,以便尽快重跑资料测试。
除了单元测试,另一个把关品质的重要手段是稽核。Netflix有许多稽核机制,每当资料来源出现异动时,这些稽核机制就会去检查资料背后的各种上下文脉络。
Netflix资料工程技术架构最大目标是,让常见需求更容易进行,而且能兼顾各层级的客制化需求,Netflix自己打造了许多好用工具,例如大数据Query UI工具就是他们的资料工程师最常用的工具。图片来源/Netfllix
建立WAP稽核模式,自制稽核工具确保资料品质
Netflix采取了一套稽核模式称为WAP模式,当资料第一次写入(Write)时,会先产生一个隐藏的资料表快照,在用Netflix资料稽核工具对写入的资料进行检查(Audit),只有通过所有稽核后,才会发布(Publish)这个Iceberg快照版本,作为当前所用的资料表快照版本。Netflix在发布快照时,不会进行资料复制,不将快照资料复制一份后再发布。一方面因为这些资料集都非常庞大,另一方面,Netflix更新资料的频率很快,每天都会重建许多资料集,复制资料的代价是会拖慢了整个资料工作流程。
资料稽核工具还可以细分成两类,一种是通用稽核工具,提供了资料工程师经常必做的资料稽核,包括了键值检查(不重复或空值)、资料例外检查、行数或栏位数检查。另外一种是特定脉络稽核工具,例如一部电影不能有多个片头。十大热门影集要有主打预告。要打造这类稽核工具,资料工程师也得对所拥有的资料有更深度的理解,以及了解资料的利害关系人在乎的点是什么。
排程平台每天执行7万个工作流程
在Netflix批次处理流程中的第三步骤是任务排程和监控。Netflix自己打造了一套能支援超大规模任务的工作流程排程平台Maestro。这个平台现在每天会执行高达7万个工作流程,累计超过了50万个任务步骤。
资料工程师可以透过YAML DSL语法或Python DSL语法,很容易就可以定义工作流程,来组合不同资料工程处理或是机器学习的任务。甚至可以透过UI介面或只需撰写很少量的程式,就能预先定义不同任务的处理流程,再透过Maestro指定排程时间,定期执行。
Maestro还支援事件驱动模式,可以指定驱动流程的事件,一旦出现了指定事件,才会启动对应的工作流程。资料使用者得将想要执行的工作流程,注册到讯号服务中,这个讯号服务会不断侦测各种资料来源的变动事件资讯,一但出现某个资料事件,例如档案上传到S3了,就会驱动在登记清单中的工作流程所对应的任务,来展开批次处理作业。
在Netflix资料工程架构中的各种工具和系统,几乎所有的事件都会留下Log纪录,储存到资料仓储中,整合到一个随时可用的Iceberg资料表中,包括了每一项批次处理的所有任务,所有的资料稽核结果,资料表的各种使用行为等。
批次处理流程的最后一项是资料管理。Netflix有一个成本分析仪表板工具dlmdash,用来计算每一个资料工作流程的运算成本,还有资料表的储存成本,并且会按照团队、部门、平台来分类统计,也会列出成本特别高的排名清单。不只分析成本,资料管理上搭配了一个主动式的资料清洁工工具,会自动清除没有使用的资料。
例如,不少工程师在开发阶段常会建立了不少只有自己才会用到的资料栏位,等到将这只程式部署到正式环境后,清洁工工具就会自动移除那些只给个人使用的资料栏位来节省资源。或是有资料工程师新建了一个资料表,经过一段时间都还没开始使用,清洁工工具也会自动删除这个资料表。这个资料清洁工工具,会强制执行Netflix的资料留存规则,不符者就会移除。