天天看點

OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?

文 / Roberto J Peon, Rishit Shroff

譯 / John

技術審校 / 趙化強、李東明

原文 : 

https://code.fb.com/video-engineering/oil-vcache/

多年以來,開發者在程式設計時所秉持的基本思路是“open()ed”一個檔案并“write()n”,随後在本地檔案系統“read()”。但在分布式系統中,這些操作涉及分布在不同網絡多個位置的主機上的多個程序。這些主機中的每一個 (或網絡本身 )都可能獨立且意外地出現當機。存儲系統應該如何應對此類故障,防患于未然?我們建立了一種輸出輸入語言——OIL,其原理是對異構存儲系統中的檔案進行統一的命名空間管理和抽象化。我們相信OIL代表了對通用存儲抽象化的新了解。OIL + VCache将這種抽象化過程與我們的分布式虛拟記憶體系統VCache相結合,可以顯著的提升效率和性能。

大型公司通常使用許多不同的存儲系統,并希望以此能夠輕松通路和共享檔案。但随着時間的推移,企業需要定期将資料遷移到不同的存儲系統中。OIL使企業能夠“配置”異構存儲系統,而不用重新編碼,這大大減少資料遷移的成本。與此同時,OIL還擴充了POSIX API以更好地察覺不同分布式系統之間的細微差别。通過提供易于使用的抽象化過程捕獲這些所需的關鍵資料,OIL可以為編寫應用程式的開發者以及維護存儲系統的運維人員提供更多便利。

開發OIL

想象一下,你的一個應用正在寫入資料到三台主機中,隻有一台主機寫入成功。那麼I / O系統應該向使用者傳回“成功”——還是應該等待三台主機都“成功”、“失敗”或“逾時”才傳回?這個問題的正确答案取決于應用場景的特殊性及其所需權衡的名額。例如,與家人進行視訊會議時,其需要權衡的名額與執行線上購物交易有很大不同。特别是視訊會議應用程式可能會通過舍棄部分一緻性和資料丢失以換取低抖動和低延遲,而購物應用程式則恰恰相反。

OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?
OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?

通過組合的方式,每個應用可以共享存儲系統,并且可以進行各自的優化。為實作此目的,會存儲并了解一張有向無環圖(DAG),此無環圖可以表示任意檔案的I/O流程。開發人員可根據每個檔案甚至每個I/O的不同屬性編寫不同的DAG,并随着時間的推移與需求的變化更改這些屬性,繼而根據檔案的使用情況(無論是經常通路還是很少通路資料)無需更改其名稱即可比對存儲屬性。這樣使得OIL虛拟檔案系統與檔案能夠一起移動并使它們保持原有的名稱,而不是将檔案從一個存儲系統移動到另一個存儲系統,繼而使其名稱出現變化。

除了通過DAG配置I/O外,OIL還對熟悉的read()API進行了優化。對于大多數系統,當所請求的資料超出目前檔案結尾的位元組時将産生越界錯誤。但是OIL的read()調用會阻塞,直到讀取到至少一個位元組或發生逾時 - 即使請求的位元組超出最大寫入偏移量,也就是能夠讀取還未寫入的位元組。(由于不再需要對新資料進行輪詢,是以其含義非常深刻。讀取檔案中的一系列偏移量本質上等價于訂閱該範圍的偏移量。)通過去掉低效的輪詢方案,我們現在可以建立高效的通信系統。

雖然這種功能很強大,但經過一些實際的部署,我們意識到需要另一項調整。為了確定在已經寫入完成的檔案上的I / O不會産生出乎意料的延遲,OIL允許檔案成為永久保持不變狀态,這意味着檔案的比特值永遠不會改變(盡管存儲的位置可能仍會改變)。它還確定OIL可以“read()”讀取超過檔案結尾時,立即傳回越界錯誤。

OIL+VCache

盡管OIL授權開發人員能夠跨異構存儲系統編寫I / O,但我們意識到我們需要的不僅僅是OIL抽象化。正如虛拟記憶體改進了現代作業系統一樣,分布式虛拟記憶體可以為分布式系統的I / O提供實質性的改進。

OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?

為了獲得這些性能優勢,我們建立了一個名為VCache的分布式虛拟記憶體系統。分布式記憶體的概念并不新鮮,但VCache與其他系統之間的差别在于內建了OIL。OIL通路VCache,VCache通過OIL通路其他存儲。由于緩存(通常是多層)是實作最佳優化的重要部分,是以使用VCache(或多層VCache)組合存儲可為開發者帶來可觀的益處。VCache存在于多個使用者定義的位置并在每個位置提供了在空間、速度和可靠性之間權衡的機會。VCache支援各種寫入模式,包括直寫(write-through)、繞寫(write-around)和不同類型的回寫(write-back)。這些模式允許應用程式開發人員有效地借助緩沖,有效調用那些依賴存儲于虛拟記憶體系統的資料。

OIL + VCache如何工作?

OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?
OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?

OIL的DAG由存儲子產品和競争節點組成。存儲子產品(例如本地檔案系統或高速緩存)表示DAG中的各個節點。每個節點可以具有其特定實作某向功能的獨立配置。除了向用戶端傳遞資料或從用戶端調用資料之外,DAG節點還可以向OIL架構傳遞其工作狀态為滿意(satisfied)或耗盡(exhausted)。除此之外,DAG節點可以将批量資料和位址空間變換附加到節點。轉換包含前向糾錯、壓縮、加密和資料分塊。節點之間的連線描述了傳輸資料時使用的屬性,例如要設定的服務品質級别或使用的協定。

競争節點是内置虛拟節點,可以包含任意數量的子節點。它允許配置最大并發、num-until-satisfied、num-until-exhausted和交錯啟動延遲。此節點允許描述if-then-else-chain、for-loop或parallel-for-loop之中的任何組合的控制流。當num-until-satisfied子節點聲明“satisfied”狀态時,競争節點本身對其父節點聲明“空閑”。當num-until-exhausted子句被執行并聲明“耗盡”狀态時,競争節點本身會向其父級聲明“耗盡”。由于節點可以在聲明“耗盡”之前可選地聲明“空閑”,明确發出信号并通知應用可以繼續運作,以将用于特定I / O的所有工作完成的信令有效區分。

異步或委托寫入的一個棘手問題是緩存的故障域與執行寫入操作的主機的故障域不同。使用OIL + VCache,開發者可以擁有本地緩存,這些緩存與寫入主機具有相同的運作結果,同時還使用遠端主機實作長期持久性和負載共享。使用這樣的層次結構,開發者可以選擇減少IOPS和存儲系統開銷,并且仍然放棄相對較少的期望屬性,例如運作結果共享和對位元組的最低延遲通路。

但是,當要寫入的資料總和超過本地主機記憶體時,這種本地緩存将失敗。由于VCache使用OIL作為後備存儲,并且由于VCache可用于OIL,是以一個VCache執行個體可以使用另一個VCache執行個體作為其後備存儲。這意味着開發者可以擁有主機本地記憶體與遠端記憶體的所有優勢。将這些與競争節點放在一起,開發者可以控制複制、quorum以及共享或分離存儲與處理的運作結果。下面是一些例子,展現了這種抽象化的力量:

交錯啟動允許應用程式在延遲時間和總系統工作時間之間進行權衡。

因為我們在讨論檔案系統,是以中繼資料也應當成為我們讨論的話題之一。中繼資料通常由所有權、ACL、TTL等組成。OIL需要引用資料-DAG,用于描述如何、何時與何處進行I/O,是以通常也會在中繼資料中結束。中繼資料與分布式系統中的資料有許多相同的問題; 是以,“DAG抽象化可重用”是有一定意義的,這也是我們緻力于實作的。

OIL允許定義兩種DAG - 一個用于中繼資料,一個用于資料。這些DAG的執行架構和結構是相同的。唯一真正的差別是中繼資料DAG中的子產品給出了一項key->原子值接口而非資料-DAG的key->位元組流接口,并且中繼資料-DAG在資料-DAG之前執行。這種分離純粹是為了友善,因為開發者可以在單個DAG中表達這一點。通常使用中繼資料-DAG來描述互斥、鎖和其他序列化。描述如何以任意順序讀取和寫入任意位元組是在data-DAG中完成的。這些DAG顯著不同之處在于資料DAG可以在檔案的生命周期内發生變化,

自投入生産以來,OIL + VCache已為實時視訊流系統帶來了顯著的功能增強,并提高了可靠性,不僅降低了視訊傳輸的延遲,還有效降低了存儲和其他需求的計算開銷。OIL在多個存儲系統中的靈活性為開發人員提供了更豐富的可組合性選項,允許他們添加不超出硬體算力的功能。我們希望OIL + VCache能夠激發整個行業的抽象化與API的進一步創新。

我們要感謝所有參與OIL + VCache項目的人。

————————————————

版權聲明:本文為CSDN部落客「LiveVideoStack_」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:

https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/97449278
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。
OIL + VCache如何改善Facebook視訊延遲 并減少存儲和計算開銷?開發OILOIL+VCacheOIL + VCache如何工作?

繼續閱讀