- 摩傑斯
- 2012-08-14
分散式檔案系統後設資料服務模型方案
隨著非結構化資料的爆炸,分散式檔案系統進入了發展的黃金時期,從高效能運算到資料中心,從資料共享到網際網路應用,已經滲透到資料應用的各方各面。對於大多數分散式檔案系統(或叢集檔案系統,或並行檔案系統)而言,通常將後設資料與資料兩者獨立開來,即控制流與資料流進行分離,從而獲得更高的系統擴充套件性和I/O併發性。因而,後設資料管理模型顯得至關重要,直接影響到系統的擴充套件性、效能、可靠性和穩定性等。儲存系統要具有很高的Scale-Out特性,最大的挑戰之一就是記錄資料邏輯與物理位置的映像關係即資料後設資料,還包括諸如屬性和訪問許可權等資訊。特別是對於海量小檔案的應用,後設資料問題是個非常大的挑戰。總體來說,分散式檔案系統的後設資料管理方式大致可以分為三種模型,即集中式後設資料服務模型、分散式後設資料服務模型和無後設資料服務模型。在學術界和工業界,這三種模型一直存在爭議,各有優勢和不足之處,實際系統實現中也難分優劣。實際上,設計出一個能夠適用各種資料應用負載的通用分散式檔案系統,這種想法本來就是不現實的。從這個意義上看,這三種後設資料服務模型都有各自存在的理由,至少是在它適用的資料儲存應用領域之內。
集中式後設資料服務模型
分散式檔案系統中,資料和I/O訪問負載被分散到多個物理獨立的儲存和計算節點,從而實現系統的高擴充套件性和高效能。對於一組檔案,如果以檔案為單位進行排程,則不同的檔案會儲存在不同的節點上;或者以Stripe方式進行儲存,則一個檔案會分成多個部分存放在多個節點。顯然,我們面臨的一個關鍵問題就是如何確保對資料進行正確定位和訪問,後設資料服務正是用來解決這個問題的。後設資料服務記錄資料邏輯名字與物理資訊的對映關係,包含檔案訪問控制所需要的所有後設資料,對檔案進行訪問時,先向後設資料服務請求查詢對應的後設資料,然後透過獲得的後設資料進行後續的檔案讀寫等I/O操作。
出於簡化系統設計複雜性的考慮,並且由於大量的歷史遺留系統等原因,大多數分散式檔案系統採用了集中式的後設資料服務,如Lustre, PVFS, StorNext, GFS等。集中式後設資料服務模型,通常提供一箇中央後設資料伺服器負責後設資料的儲存和客戶端查詢請求,它提供統一的檔案系統名稱空間,並處理名字解析和資料定位等訪問控制功能。傳統的NAS系統中,I/O資料流需要經過伺服器,而分散式檔案系統中,I/O資料流不需要經過後設資料伺服器,由客戶端與儲存節點直接互動。這個架構上的變革,使得控制流與資料流分離開來,後設資料伺服器和儲存伺服器各司其職,系統擴充套件性和效能上獲得了極大的提升。顯而易見,集中式後設資料服務模型的最大優點就是設計實現簡單,本質上相當於設計一個單機應用程式,對外提供網路訪問介面即可,如Socket, RPC, HTTP REST或SOAP等。後設資料服務設計實現的關鍵是OPS吞吐量,即單位時間處理的運算元,這對集中式後設資料服務模型尤其關鍵,因為會受到系統Scale-Up方面的限制。為了最佳化OPS,該模型對CPU、記憶體、磁碟要求較高,條件允許的情況下儘量使用高效能CPU、大記憶體和高速磁碟,甚至後端儲存可考慮使用高階磁碟陣列或SSD。在軟體架構方面設計,應該考慮多程序/執行緒(池)、非同步通訊、Cache、事件驅動等實現機制。至於分散式檔案系統名字空間的設計實現,請參考“分散式檔案系統名字空間實現研究”一文,這裡不再討論。實際上,集中式後設資料服務模型的缺點同樣突出,其中兩個最為關鍵的是效能瓶頸和單點故障問題。
效能瓶頸,這種模型下後設資料伺服器在負載不斷增大時將很快成為整個系統效能的瓶頸。根據Amdahl定律,系統效能加速比最終受制於序列部分的比重,這決定了系統使用並行手段所能改進效能的潛力。這裡,後設資料伺服器就是序列的部分,它直接決定著系統的擴充套件規模和效能。檔案後設資料的基本特性要求它必須同步地進行維護和更新,任何時候對檔案資料或後設資料進行操作時,都需要同步更新後設資料。例如,檔案的訪問時間,即使是讀操作或列目錄都需要對它進行更新。客戶端訪問分散式檔案系統時,都需要先與後設資料伺服器進行互動,這包括名稱空間解析、資料定位、訪問控制等,然後才直接與儲存節點進行I/O互動。隨著系統規模不斷擴大,儲存節點、磁碟數量、檔案數量、客戶端資料、檔案運算元量等都將急劇增加,而執行後設資料伺服器的物理伺服器效能畢竟終究有限,因此集中式後設資料伺服器將最終成為效能瓶頸。對於眾所周知的LOSF(Lots of Small Files)應用,檔案數量眾多而且檔案很小,通常都是幾KB至幾十KB的小檔案,比如CDN和生命科學DNA資料應用,集中式後設資料服務模型的效能瓶頸問題更加嚴重。LOSF應用主要是大量的後設資料操作,後設資料伺服器一旦出現效能問題,直接導致極低的OPS和I/O吞吐量。目前,以這種模型實現的分散式檔案系統都不適合LOSF應用,比如Lustre, PVFS, GFS。
實際上,效能瓶頸問題沒有想像中的那麼嚴重,Lustre, StorNext, GFS等在大檔案應用下效能極高,StorNext甚至在小檔案應該下效能也表現良好。一方面,首先應該儘量避免應用於LOSF,除非對效能要求極低。其次,對於大檔案應用,更加強調I/O資料吞吐量,後設資料操作所佔比例非常小。檔案很大時,後設資料數量將顯著降低,而且系統更多時間是在進行資料傳輸,後設資料伺服器壓力大幅下降。這種情形下,基本上不存在效能瓶頸問題了。再者,如果出現效能瓶頸問題,在系統可以承載的最大負載前提下,可以對後設資料伺服器進行效能最佳化。最佳化最為直接的方法是升級硬體,比如CPU、記憶體、儲存、網路,摩爾定律目前仍然是有效的。系統級最佳化通常也是有效的,包括OS裁剪和引數最佳化,這方面有很大提升空間。後設資料伺服器設計本身的最佳化才是最為關鍵的,它可以幫助使用者節約成本、簡化維護和管理,最佳化的方法主要包括資料區域性性、Cache、非同步I/O等,旨在提高併發性、減少磁碟I/O訪問、降低請求處理時間。因此,在非常多的資料應用下,集中式後設資料伺服器的效能並不是大問題,或者透過效能最佳化可以解決的。
單點故障(SPOF,Single Point of Failure),這個問題看上去要比效能瓶頸更加嚴重。整個系統嚴重依賴於後設資料伺服器,一旦出現問題,系統將變得完全不可用,直接導致應用 中斷並影響業務連續性。物理伺服器所涉及的網路、計算和儲存部件以及軟體都有可能發生故障,因此單點故障問題潛在的,採用更優的硬體和軟體只能降低發生的機率而無法避免。目前,SPOF問題主要是採用HA機制來解決,根據可用性要求的高低,映象一個或多個後設資料伺服器(邏輯的或物理的均可),構成一個後設資料服務HA叢集。叢集中一臺作為主後設資料伺服器,接受和處理來自客戶端的請求,並與其他伺服器保持同步。當主後設資料伺服器發生問題時,自動選擇一臺可用伺服器作為新的主伺服器,這一過程對上層應用是透明的,不會產生業務中斷。HA機制能夠解決SPOF問題,但同時增加了成本開銷,只有主伺服器是活動的,其他伺服器均處於非活動狀態,對效能提升沒有任何幫助。
分散式後設資料服務模型
自然地有人提出了分散式後設資料服務模型,顧名思義就是使用多臺伺服器構成叢集協同為分散式檔案系統提供後設資料服務,從而消除集中式後設資料服務模型的效能瓶頸和單點故障問題。這種模型可以細分為兩類,一為全對等模式,即叢集中的每個後設資料伺服器是完全對等的,每個都可以獨立對外提供後設資料服務,然後叢集內部進行後設資料同步,保持資料一致性,比如ISILON、LoongStore、CZSS等。另一類為全分佈模式,叢集中的每個後設資料伺服器負責部分後設資料服務(分割槽可以重疊),共同構成完整的後設資料服務,比如PanFS, GPFS, Ceph等。分散式後設資料服務模型,將負載分散到多臺伺服器解決了效能瓶頸問題,利用對等的伺服器或冗餘後設資料服務分割槽解決了單點故障問題。分散式看似非常完善,然而它大大增加了設計實現上的複雜性,同時可能會引入了新的問題,即效能開銷和資料一致性問題。
效能開銷,分散式系統通常會引由於節點之間的資料同步而引入額外開銷,這是因為同步過程中需要使用各種鎖和同步機制,以保證資料一致性。如果節點同步問題處理不當,效能開銷將對系統擴充套件性和效能產生較大影響,和集中式後設資料模型一樣形成效能瓶頸,這就對分散式後設資料伺服器的設計提出了更高的要求。這種效能開銷會抵消一部分採用分散式所帶來的效能提升,而且隨著後設資料伺服器數量、檔案數量、檔案操作、儲存系統規模、磁碟數量、檔案大小變小、I/O操作隨機性等增加而加劇。另外,後設資料伺服器規模較大時,高併發性後設資料訪問會導致同步效能開銷更加顯著。目前,一些分散式檔案系統採用高效能網路(如InfiniBand, GibE等)、SSD固態硬碟或SAN磁碟陣列、分散式共享記憶體(SMP或ccNUMA)等技術進行叢集內部的後設資料同步和通訊。這的確可以明顯提高系統效能以抵消同步開銷,不過成本方面也徒然增加許多。
資料一致性,這是分散式系統必須面對的難題。分散式後設資料服務模型同樣面臨潛在的系統發生錯誤的風險,雖然一部分後設資料節點發生故障不會致使整個系統宕機,但卻可能影響整個系統正常執行或出現訪問錯誤。為了保證高可用性,後設資料會被複制到多個節點位置,維護多個副本之間的同步具有很高的風險。如果後設資料沒有及時同步或者遭受意外破壞,同一個檔案的後設資料就會出現不一致,從而導致訪問檔案資料的不一致,直接影響到上層資料應用的正確性。這種風險發生的機率隨著系統規模的擴大而大幅增加,因此分散式後設資料的同步和併發訪問是個巨大的挑戰。使用同步方法對後設資料進行同步,再結合事務或日誌,自然可以解決資料一致性問題,然而這大大降低了系統的併發性,違背了分散式系統的設計初衷。在保證後設資料一致性的前提下,儘可能地提高併發性,這就對同步機制和演算法設計方面提出了嚴格要求,複雜性和挑戰性不言而喻。
無後設資料服務模型
既然集中式或分散式後設資料服務模型都不能徹底地解決問題,那麼直接去掉後設資料伺服器,是否就可以避免這些問題呢?理論上,無後設資料服務模型是完全可行的,尋找到後設資料查詢定位的替代方法即可。理想情況下,這種模型消除了後設資料的效能瓶頸、單點故障、資料一致性等一系列相關問題,系統擴充套件性顯著提高,系統併發性和效能將實現線性擴充套件增長。目前,基於無後設資料服務模型的分散式檔案系統可謂鳳毛麟角,Glusterfs是其中最為典型的代表。
對於分散式系統而言,後設資料處理是決定系統擴充套件性、效能以及穩定性的關鍵。GlusterFS另闢蹊徑,徹底摒棄了後設資料服務,使用彈性雜湊演算法代替傳統分散式檔案系統中的集中或分散式後設資料服務。這根本性解決了後設資料這一難題,從而獲得了接近線性的高擴充套件性,同時也提高了系統效能和可靠性。GlusterFS使用演算法進行資料定位,叢集中的任何伺服器和客戶端只需根據路徑和檔名就可以對資料進行定位和讀寫訪問。換句話說,GlusterFS不需要將後設資料與資料進行分離,因為檔案定位可獨立並行化進行。GlusterFS獨特地採用無後設資料服務的設計,取而代之使用演算法來定位檔案,後設資料和資料沒有分離而是一起儲存。叢集中的所有儲存系統伺服器都可以智慧地對檔案資料分片進行定位,僅僅根據檔名和路徑並運用演算法即可,而不需要查詢索引或者其他伺服器。這使得資料訪問完全並行化,從而實現真正的線性效能擴充套件。無後設資料伺服器極大提高了GlusterFS的效能、可靠性和穩定性。(Glusterfs更深入地分析請參考“Glusterfs叢集檔案系統研究”一文)。
無後設資料伺服器設計的好處是沒有單點故障和效能瓶頸問題,可提高系統擴充套件性、效能、可靠性和穩定性。對於海量小檔案應用,這種設計能夠有效解決後設資料的難點問題。它的負面影響是,資料一致問題更加複雜,檔案目錄遍歷操作效率低下,缺乏全域性監控管理功能。同時也導致客戶端承擔了更多的職能,比如檔案定位、名字空間快取、邏輯卷檢視維護等等,這些都增加了客戶端的負載,佔用相當的CPU和記憶體。
三種後設資料服務模型比較
對Scale-Out儲存系統而言,最大的挑戰之一就是記錄資料邏輯與物理位置的映像關係,即資料後設資料。傳統分散式儲存系統使用集中式或布式後設資料服務來維護後設資料,集中式後設資料服務會導致單點故障和效能瓶頸問題,而分散式後設資料服務存在效能開銷、後設資料同步一致性和設計複雜性等問題。無後設資料服務模型,消除了後設資料訪問問題,但同時增加了資料本身管理的複雜性,缺乏全域性監控管理功能,並增加了客戶端的負載。由此可見,這三種模型都不是完美的,分別有各自的優點和不足,沒有絕對的優劣與好壞之分,實際選型要根據具體情況選擇合適的模型,並想方設法完善其不足之處,從而提高分散式檔案系統的擴充套件性、高效能、可用性等特性。集中式後設資料服務模型的代表是Lustre, StorNext, GFS等,分散式後設資料服務模型的典型案例有ISILON, GPFS, Ceph等,Glustrefs是無後設資料服務模型的經典。以上這些都是非常強大的分散式檔案系統,它們是非常好的設計典範。這也足以說明,架構固然非常關鍵,但具體實現技術卻往往決定最後的結局。
補充閱讀
[1] Ceph, http://www.ibm.com/developerworks/cn/linux/l-ceph/index.html?ca=drs-
[2] Glusterfs, http://blog.csdn.net/liuben/article/details/6284551
[3] 叢集NAS技術架構,http://blog.csdn.net/liuben/article/details/6422700




