• 简中
    • 繁中
  • 注册
  • 查看作者
  • 面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    神译局是转载旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外嘅新技术、新观点、新风向。

    转载:Netflix已经从最初嘅视频点播和DVD租赁服务公司变成‌而家嘅流媒体平台巨头,并且喺原创方面嘅投入也越来越大。为‌支撑众多创作人员嘅分布式协作,Netflix喺内部也开发‌唔少出色嘅技术。而且鉴于公司出色嘅企业文化,佢哋总是乐于将自己嘅技术实现分享出来。针对旗下艺术家跨地区、跨项目喺受控下访问唔同嘅媒体资产嘅需求,佢哋开发‌自己嘅网盘:Netflix Drive。最近,喺佢哋嘅官方博客上,Netflix将Netflix Drive嘅技术架构和设计思路公布‌出来,感兴趣嘅可以参考一下。原文标题是:Netflix Drive

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    喺本文度,我哋将介绍Netflix Drive,一种为媒体资产准备嘅云盘,并对部分功能和接口提供高层概述。我哋打算将本文作为覆盖Netflix Drive嘅系列文章嘅第一篇。喺之后嘅系列文章度,我哋将对Netflix Drive嘅若干组件进行架构性嘅深入研究。

    Netflix,尤其系Studio应用(以及云端嘅Studio)产生嘅数据高达数PB,其中就包含有价值数十亿美元嘅媒体资产。我哋嘅艺术家和工作流可能会分布喺全球各地,从事唔同嘅项目,而每一个项目产生嘅内容都构成‌一个大型嘅资产库嘅一部分。

    下图就是遍布全球嘅分布式制作嘅一个例子,唔同嘅艺术家和工作流共同协作,创建出一个或多个项目嘅资产并进行共享。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图1:跨越全球嘅分布式制作,来自世界各地嘅艺术家要制作唔同嘅资产

    喺有啲工作流当度,艺术家可能希望能浏览大型数据集当中嘅部分资产子集,比方说,跟特定项目有关嘅子集。呢啲艺术家可能想要创建个人工作区,并开展临时性资产嘅制作工作。为‌支持此类用例,向呢啲艺术家呈现相关数据全局一致嘅视图,就必须支持用户工作区和项目工作区级别嘅访问控制。

    Netflix Drive旨喺解决以下问题:暴露唔同嘅名称空间,添加适当嘅访问控制,从而帮助构建高性能,可扩展,全球分布嘅平台来存储和检索相关资产。

    我哋对Netflix Drive嘅设想是作为Studio和Media应用嘅Cloud Drive(云盘),并让佢成为访问Netflix所有内容嘅通用解决方案。

    佢对应用开发‌一个文件/文件夹接口,用来保存数据,并为控制操作提供‌一个API接口。Netflix Drive依赖于一个将会资产嘅持耐存储层嘅数据存储,以及一个元数据存储,呢个元数据存储将会提供从文件系统层次结构到数据存储实体嘅相关映射。如图2所示,主体部分是文件系统接口,API接口,元数据以及数据存储。我哋会喺以下各节对此分别进行深入研究。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图2:Netflix Drive嘅组件

     

    Netflix Drive嘅文件接口

    Nuke,Maya,Adobe Photoshop等创意应用利用文件和文件夹来存储和检索内容。Netflix Drive则要靠FUSE(用户空间嘅文件系统,File System In User Space),提供连接此类嘅应用嘅POSIX文件和文件夹接口。基于FUSE嘅POSIX接口可提供自定义功能嘅弹性,部署配置嘅灵活性以及标准及无缝嘅文件/文件夹接口。Windows(WinFSP )和MacOS (MacFUSE)都有类似嘅用户空间抽象。

    源自用户、应用以及系统动作对文件和文件夹嘅操作,会被转换为一组定义明确嘅功能和系统调用,由Linux虚拟文件系统层(或Windows嘅透传/过滤驱动)转发畀用户空间嘅FUSE层。所产生嘅元数据和数据操作则交由Netflix Drive适当嘅元数据和数据适配器实现。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图3:Netflix Drive嘅POSIX接口

    Netflix Drive嘅POSIX文件和文件夹接口被设计为分层系统,顶层是FUSE实现钩子。呢一层会为要实现嘅所有相关VFS调用提供入口点。Netflix Drive喺FUSE之下仲有一个抽象层,呢一层可以让唔同嘅元数据和数据存储通过让相应嘅适配器实现接口而插入到该体系结构内。我哋会喺下面嘅部分进一步讨论有关分层体系结构嘅更多信息。

    Netflix Drive嘅API接口

    除咗公开一个将会成为所有抽象嘅中心嘅文件接口外,Netflix Drive还开放‌API和Polled Task接口,让应用和工作流工具可以触发Netflix Drive嘅控制操作。

    例如,应用可以显式利用REST端点将存储喺Netflix Drive入面嘅文件发布到云端,然后再用REST端点通过云端检索已发布文件嘅子集。API接口还可用于跟踪大文件嘅传输,并允许第啲应用基于Netflix Drive进行开发。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图4:Netflix Drive嘅控制接口

    Polled Task接口可让studio和media工作流程编排器发布或分派任务畀唔同嘅工作站或容器上嘅Netflix Drive实例。这可以喺工作站启动时让Netflix Drive以空嘅命名空间启动,并动态映射跟艺术家概念设计过程或者工作流阶段相关嘅一组资产。此外,呢啲资产还可以映射到艺术家或应用选定嘅名称空间入面。

    或者,工作站/容器启动嘅时候可以加载预取嘅用户感兴趣嘅资产。这可以让艺术家和应用获取一个已经包含有相关文件嘅工作站,并可以选择喺设计过程期间对资产树进行添加和删除。比方说,艺术家对文件执行转换工作,并利用Netflix Drive来存储/获取中间结果以及最终嘅副本,后者则可以转换成媒体资产。

    Netflix Drive嘅引导

    鉴于应用跟Netflix Drive嘅交互可以有两种唔同模式,而家就让我哋来讨论一下点样引导Netflix Drive。

    喺启动时,Netflix Drive需要一份清单,呢份清单应该包含有关数据存储,元数据存储以及(同用户登录相关嘅)凭据嘅信息,呢样才能形成命名空间层次结构嘅实例。Netflix Drive嘅挂载点可以包含有多个Netflix Drive名称空间。

    动态实例令到Netflix Drive可以显示用户选择且可访问嘅来自大型资产库嘅数据子集。用户实例让佢可以像Cloud Drive一样工作,而用户对内容嘅处理会喺后台定期自动同步到云端。当用户喺新嘅计算机上重新启动时,同样嘅文件和文件夹会从云端预取下来。喺后续嘅博客文章度,我哋会更详细地介绍Netflix Drive嘅唔同命名空间。

    下面系一个典型嘅引导清单文件嘅例子。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    清单文件例子:此图显示嘅系引导清单json文件,从中可以睇出Netflix Drive是点样跟唔同嘅元数据存储(如Redis、CockroachDB )和数据存储(如Ceph、S3)配合使用,并将佢们捆绑喺一齐来提供资产嘅持耐层嘅

    清单系等用户工作站具备Netflix Drive个性嘅持耐性工件。佢唔受实例故障影响,而且可以喺任何新部署嘅实例上重新创建相同嘅有状态接口。

    元数据同数据存储抽象

    为‌让各种唔同嘅元数据存储和数据存储可以轻松地植入到呢个体系结构入面,Netflix Drive还开放‌元数据和数据存储嘅抽象接口。下图是解释Netflix Drive唔同抽象层嘅图解

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图5:Netflix Drive嘅分层体系结构

    元数据存储嘅特征

    Netflix Drive入面嘅每个文件都会有一个或多个对应嘅元数据节点,分别对应文件嘅唔同版本。文件系统层次结构会被建模成元数据存储入面嘅一粒树,根节点将是应用嘅顶层文件夹。

    每个元数据节点会包含有若干属性,比如文件嘅校验和数据嘅位置,用户访问数据嘅权限,文件元数据(比如大小,修改时间等)。元数据节点还可以提供对扩展属性嘅支持,呢啲属性可以用来对ACL,符号链接或第啲表现性文件系统建构进行建模。

    元数据存储区还可以揭示工作区嘅概念,也就是每个用户/应用可以有多个工作空间,而且可以跟第啲用户/应用共享工作区。呢啲更高级别嘅建构对Studio应用非常有用。

    数据存储嘅特征

    Netflix Drive嘅实现离唔开数据存储。呢种数据存储可以将字节流变成放喺存储介质入面嘅持耐存储嘅文件/对象。数据存储应开放API,让Netflix Drive执行I / O操作。字节传输嘅传输机制是数据存储嘅一项功能。

    喺第一份清单入面,Netflix Drive利用‌一个对象存储(比如Amazon S3)作为数据存储。为‌公开类似文件存储嘅属性,对象存储中需要进行一啲更改。每个文件可以存储为一个或多个对象。对于Studio应用嚟讲,文件大小有可能会超过Cloud Storage最大嘅对象大小,因此,数据存储服务应具有将文件嘅多个部分存储为单独对象嘅能力。数据存储服务负责将呢啲对象绑定到一个文件,并将呢啲对象嘅唯一ID通知畀元数据存储。数据存储喺内部实现‌将文件分割成若干部分,对内容进行加密以及对数据进行生命周期管理等功能。

    多层架构

    Netflix Drive通过其引导清单让多个数据存储成为同一安装嘅一部分。

    面向媒体资产嘅云盘:Netflix Drive 系点样设计出来嘅?

    图6:Netflix Drive嘅多个数据存储

    某啲工作室应用(比如编码和代码转换)嘅I/O特征跟典型嘅云盘唔一样。

    呢啲应用生成嘅大多数数据喺本质上都系临时性嘅,而且一开始读取会非常频繁。最终嘅编码副本需要保留,而临时数据则可以删除。为‌服务于此类应用,Netflix Drive可以将临时数据持耐化存储到距离应用较近嘅存储层,从而降低读取时延,并提高读取请求嘅经济性,因为云存储读取会产生出口成本。最后,一旦编码后嘅副本准备就绪,就可以由Netflix Drive持耐保存到云端嘅持耐存储层。单个数据存储也可以选择将存储喺更廉价嘅替代物入面嘅内容子集归档。

    安全

    Studio应用要求严格遵守安全模型,只有具备特定权限嘅用户或应用先可以访问特定资产。安全性是Netflix Drive设计嘅基石之一。Netflix Drive动态命名空间设计可让艺术家或工作流根据工作区信息和访问控制仅访问资产嘅一小部分,呢系喺Studio工作流入面用Netflix Drive嘅好处之一。Netflix Drive将身份验证和授权模型封装到元数据存储入面。呢啲会被转换为Netflix Drive入面嘅POSIX ACL。将来,Netflix Drive可以通过利用跟资产对应嘅元数据节点关联嘅扩展属性来支持更具表现性嘅ACL。

    Netflix Drive目前已被多支Studio团队用作资产嘅铺路解决方案,而且也跟多个媒体套件应用集成。从今日起,Netflix Drive可以安装喺CentOS,MacOS和Windows上。喺未来嘅博客文章里,我哋会介绍Netflix Drive嘅实现细节,相关知识,性能分析以及基于Netflix Drive开发嘅部分应用和工作流。

    译者:boxi

    cantonese.live 足跡 粵字翻譯

  • 0
  • 0
  • 0
  • 168
  • 请登录之后再进行评论

    登录
  • 任务
  • 发布
  • 偏好设置
  • 单栏布局 侧栏位置: