星環科技分布式文件系統TDFS大揭秘(上)

fans news 發佈 2021-11-26T11:13:48+00:00

星環科技是一家致力於打造企業級大數據基礎軟體,圍繞數據全生命周期為企業提供基礎軟體及支持的廠商。在這個數據驅動的數位化世界中,來自社交媒體、金融科技等不同領域的數據正在大幅度增長,例如大量商業報告、網頁、圖像和音視頻等。如今,接近80%的數據都是非結構化的。

星環科技是一家致力於打造企業級大數據基礎軟體,圍繞數據全生命周期為企業提供基礎軟體及支持的廠商。在這個數據驅動的數位化世界中,來自社交媒體、金融科技等不同領域的數據正在大幅度增長,例如大量商業報告、網頁、圖像和音視頻等。如今,接近80%的數據都是非結構化的。不同於結構化半結構化數據的良好結構,存儲和處理如此龐大的非結構化數據集正在成為傳統計算技術的挑戰。


本文將著重介紹星環科技新推出的一款致力於打造高性能、高可靠、高可用、強一致分布式文件系統TDFS。


從hdfs說起:


HDFS是Hadoop非常重要的核心之一。其旨在通過計算機集群在分布式環境中有效地存儲和處理大批量文件,有效地解決大規模、海量數據的存儲以及讀寫性能的問題,並確保了設備的穩定性。HDFS常常用於在Hadoop生態體系內提供分布式文件讀寫服務,是Hadoop生態系統中使用最為廣泛的組件。


HDFS有以下的設計目標:

●高可靠性,可以防止伺服器出現故障宕機所導致的數據丟失等問題;

●相比較磁碟陣列構建成本低,可構建在廉價x86伺服器上;

●將大文件切成Block,支持GB-TB級別海量數據存儲;

●支持大規模離線批處理,利用數據本地性提速計算過程。


雖然HDFS有效解決了用戶大文件存儲等問題,但在處理大量小文件時性能下降滯後。並且其本身設計也存在一些缺陷,例如NameNode的單點性能瓶頸,NameNode高可用過程中寫放大嚴重,無法存儲大量小文件等問題。


以下是HDFS的簡易架構圖:



從整個系統架構上看,NameNode扮演著十分重要的角色,其一大功能是負責進行元數據的存儲與管理。其中元數據信息包括文件名、路徑、文件所有者、副本數等。


NameNode通常將元數據熱加載至內存中,但是隨著數據規模和集群規模的持續增長,逐漸出現內存受限的問題,並且很多存儲小文件時被隱藏的問題被暴露出來,比如啟動時間變長。NameNode的啟動過程通常分為幾個階段,包括fsimage本地數據加載、讀取JournalNode上比fsimage新的editlog、在本地進行editlog replay、DataNode的BlockReport。


隨著數據規模的增長,現場經常出現需要replay的editlog非常多的情況,在replay完成之前,NameNode將一直處於Safemode狀態。在該狀態下無法對外提供服務,並且處理來自DataNode的BlockReport階段的時長會同步增加。最後只有當DataNode消息中上報的block個數達到NameNode所需的99.99%後,NameNode才會退出Safemode狀態,並開始對外提供服務,整體啟動過程將十分耗時。並且,Block數量龐大時,BlockReport請求也有可能導致NameNode長時間卡頓。


除此之外,由於有關元數據的管理處理等操作基本都是基於NameNode來進行,那麼當內存被大量占用時,對於元數據的增刪改查的操作性能會出現下降的趨勢,相對於更複雜的操作處理,比如RPC (Remote Procedure Call) 請求的性能下降趨勢將會更加明顯。


HDFS為了實現高可用,需要額外引入 Zookeeper,JournalNode ,ZKFC,Standby NameNode,但是引入額外服務的同時也會因此引入其他問題。這裡比較嚴重的問題是一次文件系統元數據的操作將會被同步到至少5個不同的副本當中(JournalNode3份,NameNode2份),如果每個進程配置了兩個目錄,那麼這個情況還會進一步惡化。另外,多個職能不同但是互相依賴的進程也給運維,特別是故障定位製造了很大的麻煩。



此外,NameNode內存使用和元數據量正相關。在較大的集群中,NameNode中所存儲的元數據量通常十分龐大。然而,單個NameNode可支撐的文件數量以及吞吐量十分有限。儘管可以通過採取小文件合併或數據壓縮等手段減少所存儲的元數據量,但隨著集群規模和業務的不斷發展,壓力都集中在單個NameNode上(如下圖所示),導致系統瓶頸,無法具備高可用。並且,當元數據量達到了NameNode的上限時,則需要不斷的刪除舊的數據來維持現有的儲存量。CMS(concurrent mark sweep) GC頻率也將會越來越高,甚至可能會由於過程中文件過大而空間不足以存放所導致的promotion fail,從而觸發FullGC,極易誘發系統內部工作線程卡頓等問題,風險將不可控。



因此,當總元數據量超過單個NameNode可支撐的上限時,系統則需改用Federation的方式來維護,即增加機器。



儘管這樣的機制可以解決當前元數據存儲量有限的問題,但是兩套NameNode之間相互獨立互不相通,其中NameNode元數據以及DataNode塊文件無法進行共享,如果出現業務需要訪問所有數據的情況,那麼則需要根據業務來進行拆分,改造過程會十分麻煩。拆分過程需要使用DistCP將數據進行完整的拷貝,存儲成本將會非常高,而且進行讀寫備份的過程十分繁瑣,整體效率也會大大降低。並且,使用了Federation之後,路徑需要使用ViewFs的方式來訪問,基本上所有需要訪問HDFS的業務代碼都有可能需要進行相應的改造。比如原來要訪問HDFS的/path/to/abc.log,現在要改成viewfs://path/to/abc.log,或者hdfs://nameservice1/path/to/abc.log。


雖然在這個機制下NameNode以及NameSpace存在多個,但是其中單一的NameNode以及NameSpace仍然存在單點故障。如果其中一個NameNode出現故障宕機,那麼其文件系統所管理的元數據將無法訪問。


TDFS的誕生


基於前文中提到的業務方面的瓶頸,星環科技推出了TDFS -- 一個雲原生,兼容 Hadoop 及更多生態,支持對象存儲、文件系統,致力於打造高性能、強一致的分布式存儲系統,其充分具備高擴展性、低成本、高可靠和高可用等特性。


為什麼需要TDFS


TDFS提供了對以上問題的解法。TDFS 1.0是Rust編寫的新一代分布式文件系統,支持了分布式文件系統(Distributed File System)和對象存儲系統(Object Storage)兩個系統的特性。同時TDFS的元數據管理採用了新的分布式一致性協議,簡化了元數據存儲的架構的同時也減少了元數據Editlog的複製份數。TDFS採用了全新的元數據存儲數據結構,內存中可以存放10倍於HDFS元信息數據的同時,還可以將較冷的元數據信息識別並利用硬碟進行存放,有效解決文件存儲數量因為內存不足受到的限制。


以下是TDFS支持的主要核心能力:


海量存儲 — TDFS提供無上限文件元數據存儲,無單點瓶頸。充分滿足客戶海量大數據存儲與分析的需求的同時可以有效提高資源利用率,確保數據高可用。


安全可靠 — 基於分布式架構技術,TDFS提供數據多副本冗餘存儲,確保數據的持久性以及服務的可用性。


數據管理 — TDFS提供文件目錄結構,支持數據批量導入和導出的時候以文件形式進行數據交換。


兼容生態 — 基於分布式存儲架構,TDFS 在通信協議上兼容 HDFS 協議,可直接替換 NameNode,支持對TDH的熱升級,兼容Hadoop生態。


穩定性 — 由Native語言編寫,性能平滑,沒有GC帶來的突發性性能波動。


高性能 — TDFS支持用戶快速的進行創建目錄、目錄存取,檢索、查看目錄下的統計信息及進行權限管理等操作。此外,TDFS有著更高的並發度,單個存儲對象的操作也更快。



TDFS全方位滿足了企業對存儲性能、容錯性、服務成本等多方面的需求,有效適用於對海量數據進行存儲實時計算、即時查詢、綜合檢索和數據分析等主流業務場景,在海量大數據的存儲、查詢和計算中作為數據源以支持滿足不同的大數據計算與存儲分析場景需求。


關於TDFS是如何實現這些功能的,我們將會在《星環科技分布式文件系統TDFS大揭秘(下)》中進行深入剖析。

關鍵字: