面向媒體資產的雲盤:Netflix Drive 是如何設計出來的?

如何做受控的情況下跨地區、跨項目訪問不同的媒體資產?

神譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術、新觀點、新風向。

編者按:Netflix已經從最初的視頻點播和DVD租賃服務公司變成了現在的流媒體平台巨頭,並且在原創方面的投入也越來越大。為了支撐眾多創作人員的分佈式協作,Netflix在內部也開發了不少出色的技術。而且鑑於公司出色的企業文化,他們總是樂於將自己的技術實現分享出來。針對旗下藝術家跨地區、跨項目在受控下訪問不同的媒體資產的需求,他們開發了自己的網盤:Netflix Drive。最近,在他們的官方博客上,Netflix把Netflix Drive的技術架構和設計思路公佈了出來,感興趣的可以參考一下。原文標題是:Netflix Drive

在本文中,我們將介紹Netflix Drive,一種為媒體資產准備的雲盤,並對部分功能和接口提供高層概述。我們打算把本文作為覆蓋Netflix Drive的系列文章的第一篇。在之後的系列文章中,我們將對Netflix Drive的若干組件進行架構性的深入研究。

Netflix,尤其是Studio應用(以及雲端的Studio)產生的數據高達數PB,其中就包含有價值數十億美元的媒體資產。我們的藝術家和工作流可能會分佈在全球各地,從事不同的項目,而每一個項目產生的內容都構成了一個大型的資產庫的一部分。

下圖就是遍佈全球的分佈式製作的一個例子,不同的藝術家和工作流共同協作,創建出一個或多個項目的資產並進行共享。

圖1:跨越全球的分佈式製作,來自世界各地的藝術家要製作不同的資產

在有些工作流當中,藝術家可能希望能瀏覽大型數據集當中的部分資產子集,比方說,跟特定項目有關的子集。這些藝術家可能想要創建個人工作區,並開展臨時性資產的製作工作。為了支持此類用例,向這些藝術家呈現相關數據全局一致的視圖,就必須支持用戶工作區和項目工作區級別的訪問控制。

Netflix Drive旨在解決以下問題:暴露不同的名稱空間,添加適當的訪問控制,從而幫助構建高性能,可擴展,全球分佈的平台來存儲和檢索相關資產。

我們對Netflix Drive的設想是作為Studio和Media應用的Cloud Drive(雲盤),並讓它成為訪問Netflix所有內容的通用解決方案。

它對應用開發了一個文件/文件夾接口,用來保存數據,並為控制操作提供了一個API接口。Netflix Drive依賴於一個將會資產的持久存儲層的數據存儲,以及一個元數據存儲,這個元數據存儲將會提供從文件系統層次結構到數據存儲實體的相關映射。如圖2所示,主體部分是文件系統接口,API接口,元數據以及數據存儲。我們會在以下各節對此分別進行深入研究。

圖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適當的元數據和數據適配器實現。

圖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進行開發。

圖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的不同命名空間。

下面是一個典型的引導清單文件的例子。

清單文件例子:此圖顯示的是引導清單json文件,從中可以看出Netflix Drive是怎麼跟不同的元數據存儲(如Redis、CockroachDB )和數據存儲(如Ceph、S3)配合使用,並將它們捆綁在一起來提供資產的持久層的

清單是讓用戶工作站具備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通過其引導清單讓多個數據存儲成為同一安裝的一部分。

圖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

本文經授權發布,不代表36氪立場。

如若轉載請註明出處。來源出處:36氪