竇熙洋
(中影動畫產業(yè)有限公司,北京 101400)
現如今動畫電影需要大量渲染時間,一般會有上百臺甚至上千臺主機同時進行渲染。首先會產生大量渲染數據,對存儲空間有一定的要求,其次就是上百上千臺主機會同時訪問存儲,會給存儲服務器帶來很大的數據壓力。現在市面上存儲架構具有代表性的有SAN 架構存儲、NAS架構存儲、DAS架構存儲,存儲服務器讀取數據的模式大有不同,可分為分布式和集中式兩種。為滿足動畫渲染的存儲,中影動畫產業(yè)有限公司 (以下簡稱 “中影動畫”)選擇了IBRIX 分布式文件系統。
本文主要闡述了動畫制作渲染平臺如何選擇存儲,動畫渲染對數據處理的需求,以及動畫制作數據的特殊性,如何通過改變存儲結構來解決動畫制作和動畫渲染的實際問題。
現在市面上存儲架構具有代表性的有SAN 架構存儲、NAS架構存儲和DAS架構存儲。
DAS架構存儲是直接連接主機的存儲。通過存儲控制器直連服務器,服務器經識別scsi設備,對大量的scsi設備進行邏輯卷編輯格式化,最終實現數據存儲以及文件共享。
優(yōu)勢:結構簡單,所需要的硬件設備較少,易于部署,適用于單臺設備存儲數據;缺點:多臺設備互聯讀寫文件效率底,多個DAS架構存儲互聯文件分散無法統一管理,只能通過windows DFS共享進行數據管理,整合共享層級。
SAN 架構存儲是通過光纖線實現網絡連接的存儲設備。存儲控制器通過光纖線纜連接到光纖交換機,實現各個主機與存儲控制器互聯,通過安裝特定的文件系統實現網絡存儲共享。
優(yōu)勢:單臺客戶端讀寫速度快,通過對SAN交換機、存儲控制器的優(yōu)化,可以提供多鏈路同時并行讀寫操作,常見的SAN 文件系統有StorNext文件系統,該套文件系統很好地將多個邏輯卷整合到一起實現條帶化讀寫,由專門的元數據管理服務器負責檢索文件,配合存儲控制器的緩存機制,可以實現快速讀寫數據的要求,一般符合后期非線編輯,提供高IOPS吞吐量;缺點:多臺設備讀取數據速度不穩(wěn)定,由于數據被條帶化,會使得磁盤利用率分配上受終端的訪問量影響。最大的問題是文件系統讀寫都需要訪問元數據服務器進行文件檢索,數據請求少的情況下還可以滿足,一旦訪問的數據請求數量過多,會出現服務器無法處理讀寫請求導致元數據服務器死機,客戶端會出現卡頓無法訪問數據的情況。對于200或300個用戶級別的客戶端請求無法滿足。
NAS存儲是通過以太網共享的網絡存儲架構,利用nfs、samba、cifs提供網絡共享服務,通過IP地址、網絡名稱、dns解析的方式進行數據訪問,是當下使用最為廣泛的互聯網存儲架構,通過NAS衍生了多種分布式文件系統,例如:軟件定義存儲Ceph、glusterFS、IBRIX 以及硬件NAS存儲NETAPP、日立、EMC (Islong)、NEC等。
優(yōu)勢:NAS的分布式文件系統具有高負載擴展靈活的特性,可以橫向擴展NAS 網關,縱向擴展磁盤控制器,適合大規(guī)模數據請求;缺點:主要體現在集中式NAS,會出現元數據服務器死機以及數據讀寫速度擁塞等問題。
動畫制作過程屬于線性流程,數據包括:前期設計、模型建模、模型綁定、動畫表演、動畫特效、動畫燈光、動畫渲染和動畫合成。整個文件類型復雜,數據大小不一,會產生大量的小文件。
(1)前期設計需要繪制大量的矢量圖、照片、掃描文件,涉及人物角色、場景以及背景等。
(2)模型建模首先產生基本工程文件,每個模型又是由多個資產拼裝而成,模型文件盡可能輸出的小一些,主要是為了后端環(huán)節(jié)可以順暢的打開,甚至有的模型創(chuàng)建好幾套,為了配合項目制作,分為大、中、小三個標準進行制作,一般產生的文件有緩存文件、工程文件和圖片,會產生大批量的小文件。
(3)動畫制作環(huán)節(jié)類似于視頻制作會產生大量的流媒體文件(簡稱拍屏文件),主要是提供導演審看,根據動畫環(huán)節(jié)細分,從最初的預覽片,到動畫表演最終鏡頭,產生的大量流媒體文件,都要在線審看播放,對存儲會產生很大的壓力。
(4)動畫特效環(huán)節(jié)由于需要對布料、毛發(fā)、水、煙、火、粒子進行運算,會產生大量的小文件也就是緩存文件,小文件一般來說是要求存儲IOPS性能的,大量的小文件讀取會導致元數據服務器死機,導致數據訪問失敗。
圖1 中影動畫各環(huán)節(jié)產生數據類型圖
(5)動畫渲染的過程,是將存儲中若干個工程文件拼裝到一起,進行浮點運算輸出到一張圖片上的過程,也是在整個動畫制作中最為耗資源的一個環(huán)節(jié)。渲染數據還會細分,需要分層進行渲染,渲染產生的數要占全片1/3以上,文件大小普遍在8~11MB,大量的小文件會產生大量的元數據,接下來會有成百臺渲染服務器同時讀取這些文件,也就是同時要對元數據進行檢索請求,一般集中式共享存儲都很難滿足大批量的元數據請求,會一下把存儲控制器緩存用盡。一旦存儲控制器緩存用盡,存儲性能就會下降,導致元數據服務器死機。
(6)動畫合成產生的數據主要是流媒體、序列幀等。該環(huán)節(jié)是將分層渲染的序列幀合成到一起,該操作類似于后期剪輯非線編輯的操作,占用存儲資源大,會導致存儲帶寬擁塞。各環(huán)節(jié)文件類型及文件大小信息見圖1。
圖2 中影動畫IBRIX 存儲架構拓補圖
中影動畫IBRIX 分布式存儲架構是由12 臺存儲網關組成,12臺網關通過光交換機與SAN 存儲相連接,每臺網關服務器都可以訪問到SAN 存儲的所有邏輯卷,實現12臺存儲網關分布式進行數據共享。每兩臺網關服務器通過HA 設置進行熱備,通過網關服務器ILO 模塊進行事件觸發(fā),圖2是中影動畫IBRIX 存儲架構拓補圖。
中影動畫制作人員是通過域名解析的方式,訪問這12臺存儲網關的。例如在文件夾地址欄里鍵入“cfa.anime.com”地址,會隨機訪問12臺網關中的其中一臺,進行數據讀寫操作。根據中影動畫制作項目的要求,需要在同一個名字空間里建立工程目錄,我們會將所有的存儲容量分配到名字空間為IBRIX01的文件系統,12臺存儲網關里面會各自掛載名字為IBRIX01 的目錄,再各自將目錄進行SAMBA、nfs共享,在DNS服務里面我們會將12臺網關服務器地址都對應一個域名,以輪巡訪問機制進行負載。在中影動畫流程管理軟件里面會對存儲地址進行定義,通過生產管理軟件在項目開始的時候會在IBRIX01 共享目錄下面建立項目工程文件,文件夾的層級是由生產管理軟件定義的,所有制作人員操作都需要登錄中影動畫生產管理系統,打開所需軟件進行制作,數據的訪問讀取寫入都是按照生產管理系統指定的目錄結構進行操作的,所有制作文件的路徑都是絕對路徑,包含嵌套文件路徑也為絕對路徑,最終渲染通過生產管理系統將文件提交到渲染農場進行數據分析,提交任務進行渲染,最終渲染文件會按照指定的目錄存放??梢哉f所有參與制作人員的設備,渲染服務器都在對存儲進行讀寫操作,根據各環(huán)節(jié)產生的數據類型以及大小都不同整個項目產生上千萬的文件數量,一般性能的存儲是無法滿足的,這時IBRIX 分布存儲就體現它的優(yōu)勢了。
IBRIX分布存儲由兩部分組成,管理機和網關服務器組成一個分布式集群。
通信分為三塊:對外網絡提供samba nfs 共享服務;內部通信網絡提供內部元數據交換;SAN 存儲網絡向所有網關服務器開放,所有網關服務器讀到存儲邏輯單元都要保持一致。
IBRIX 管理機會將存儲上的邏輯單元LUN 進行掃描,將掃描的LUN 標記為sagment均勻分配給12個網關服務器進行管理,將所有分配的sagment建立路由表,標記網關服務器與segment的對應關系,分發(fā)給12臺網關服務器,最終形成整體的文件系統進行格式化,主要目的是實現元數據負載。IBRIX 文件讀寫有一個機制,寫數據會直接寫到本地管理的segment,是不可以跨網關進行寫操作的,讀數據是可以跨網關直接通過SAN 讀取數據的,這樣有利于負載高并發(fā)請求。IBRIX 讀寫數據模式,也有它的弊端,就是嚴格要求segment數據存儲均勻,保證每個segment剩余空間接近,這樣才能很好的負載,一旦數據segment存儲空間不均衡會造成單臺網關服務器并發(fā)處理能力下降,出現短時間死鎖,IBRIX 內部有個命令是可以解決的,定期自動均衡數據處理,原理就是互相拷貝最終達到所有segment數據空間接近一致。
圖3 IBRIX 數據讀取過程圖
圖4 IBRIX 數據寫入過程圖
從圖3我們可以看出數據讀取的時候會先分析數據屬于哪個segment,該segment 歸哪個網關server監(jiān)管,如果屬于本地segment就進行直接讀取,如果不屬于本地segment會根據segment路由表找到對應的監(jiān)管網關服務器請求元數據,通過內部通信得到元數據,透過SAN交換機讀取存儲數據。
從圖4可以看出寫入操作相對簡單,寫入請求的網關服務器只寫自己監(jiān)管的segment,一般網關服務器都會監(jiān)管10~20個segment,會從中選擇剩余空間較大的segment存儲數據,以保證數據均勻存儲。
中影動畫自2009 年選用IBRIX 分布式存儲,至今已承接了多種電影項目,包括動畫電影 《瘋狂斗牛場》《直立象傳說》《最可愛的人》,這三部電影所產生的數據分別為160TB 、100TB、70TB。
圖5 中影動畫IBRIX 存儲管理界面
通過圖5 可以看到這套存儲可以寫入770,244,608個文件,我們已經存儲了24,527,493個文件,還剩下745,717,115 個文件可以寫入。而這只是《最可愛的人》項目的數據而已。
根據中影動畫多年使用IBRIX 分布存儲系統進行動畫項目制作及動畫渲染經驗,對于這么多的非結構化數據的管理,能保證從2009年至今所有項目都可順利完成,相比現在主流的對象分布式存儲,以及虛擬化軟件定義存儲,我認為結合IBRIX 在分布式存儲的優(yōu)缺點,合理避免缺陷,運用好它的優(yōu)勢,該套存儲是比較適合動畫渲染以及動畫制作的,可滿足小文件非結構數據高并發(fā)數據管理。?