薄膜存儲器
薄膜存儲器 thin film storage,簡稱TFS,薄膜存儲是在集成電路工藝上發展起來的新存儲技術。其原理是通過改變矽基底上的薄膜的物理性質,實現數字信息的存儲。
薄膜存儲器目前有鐵電薄膜存儲器和有機薄膜存儲器等。
文件系統
TFS(Taobao FileSystem)是一個高可擴展、高可用、高性能、面向互聯網服務的分布式文件系統,其設計目标是支持海量的非結構化數據。
淘蝌蚪項目主頁:code#taobao#org/project/view/366/(#修改為.)
其他解釋
Tactical Fighter Squadron(TFS)
戰術戰鬥機中隊
高等學校法語專業考試等級證書: FS
韓國化妝品牌子:The face shop 簡稱“TFS"
僞後宮動漫小說:THE Felicità Story(TFS)
同步發電機型号:TFS系列三次諧波同步發電機是蘭州電機有限責任公司生産的國産電機産品
美利達山地車車架名稱:TFS
特性
1. 采用扁平化的數據組織結構
2. 使用HA架構和平滑擴容
3. 支持多種客戶端
4. 支持大小文件存儲
5. 可為外部提供高可靠和高并發的存儲訪問
6. 支持大文件功能
7. Resource Center Server,用于管理TFS集群的用戶資源配置
8. TFS服務程序開發框架,統一TFS網絡客戶端庫,并新增異步回調功能
9. 優化數據流,讓寫請求盡可能均勻的分布在不同的DataServer
平滑擴容
原有TFS集群運行一定時間後,集群容量不足,此時需要對TFS集群擴容。由于DataServer與NameServer之間使用心跳機制通信,如果系統擴容,隻需要将相應數量的新DataServer服務器部署好應用程序後啟動即可。這些DataServer服務器會向NameServer進行心跳彙報。NameServer會根據DataServer容量的比率和DataServer的負載決定新數據寫往哪台DataServer的服務器。根據寫入策略,容量較小,負載較輕的服務器新數據寫入的概率會比較高。同時,在集群負載比較輕的時候,NameServer會對DataServer上的Block進行均衡,使所有!DataServer的容量盡早達到均衡。
進行均衡計劃時,首先計算每台機器應擁有的blocks平均數量,然後将機器劃分為兩堆,一堆是超過平均數量的,作為移動源;一類是低于平均數量的,作為移動目的。
移動目的的選擇:首先一個block的移動的源和目的,應該保持在同一網段内,也就是要與另外的block不同網段;另外,在作為目的的一定機器内,優先選擇同機器的源到目的之間移動,也就是同台!DataServer服務器中的不同!DataServer進程。
當有服務器故障或者下線退出時(單個集群内的不同網段機器不能同時退出),不影響TFS的服務。此時!NameServer會檢測到備份數減少的Block,對這些Block重新進行數據複制。
在創建複制計劃時,一次要複制多個block,每個block的複制源和目的都要盡可能的不同,并且保證每個block在不同的子網段内。因此采用輪換選擇(roundrobin)算法,并結合加權平均。
由于DataServer之間的通信是主要發生在數據寫入轉發的時候和數據複制的時候,集群擴容基本沒有影響。假設一個Block為64M,數量級為1PB。那麼NameServer上會有 1 * 1024 * 1024 * 1024 / 64 = 16.7M個block。假設每個Block的元數據大小為0.1K,則占用内存不到2G。
存儲機制
在TFS中,将大量的小文件(實際用戶文件)合并成為一個大文件,這個大文件稱為塊(Block)。TFS以Block的方式組織文件的存儲。每一個Block在整個集群内擁有唯一的編号,這個編号是由NameServer進行分配的,而DataServer上實際存儲了該Block。在!NameServer節點中存儲了所有的Block的信息,一個Block存儲于多個!DataServer中以保證數據的冗餘。對于數據讀寫請求,均先由!NameServer選擇合适的!DataServer節點返回給客戶端,再在對應的!DataServer節點上進行數據操作。!NameServer需要維護Block信息列表,以及Block與!DataServer之間的映射關系,其存儲的元數據結構如下:
在!DataServer節點上,在挂載目錄上會有很多物理塊,物理塊以文件的形式存在磁盤上,并在!DataServer部署前預先分配,以保證後續的訪問速度和減少碎片産生。為了滿足這個特性,!DataServer現一般在EXT4文件系統上運行。物理塊分為主塊和擴展塊,一般主塊的大小會遠大于擴展塊,使用擴展塊是為了滿足文件更新操作時文件大小的變化。每個Block在文件系統上以“主塊+擴展塊”的方式存儲。每一個Block可能對應于多個物理塊,其中包括一個主塊,多個擴展塊。
在DataServer端,每個Block可能會有多個實際的物理文件組成:一個主Physical Block文件,N個擴展Physical Block文件和一個與該Block對應的索引文件。Block中的每個小文件會用一個block内唯一的fileid來标識。!DataServer會在啟動的時候把自身所擁有的Block和對應的Index加載進來。
容錯機制
集群容錯
TFS可以配置主輔集群,一般主輔集群會存放在兩個不同的機房。主集群提供所有功能,輔集群隻提供讀。主集群會把所有操作重放到輔集群。這樣既提供了負載均衡,又可以在主集群機房出現異常的情況不會中斷服務或者丢失數據。
NameServer容錯
Namserver主要管理了DataServer和Block之間的關系。如每個!DataServer擁有哪些Block,每個Block存放在哪些DataServer上等。同時,NameServer采用了HA結構,一主一備,主NameServer上的操作會重放至備NameServer。如果主NameServer出現問題,可以實時切換到備NameServer。
另外NameServer和DataServer之間也會有定時的heartbeat,DataServer會把自己擁有的Block發送給!NameServer。NameServer會根據這些信息重建DataServer和Block的關系。
DataServer容錯
TFS采用Block存儲多份的方式來實現!DataServer的容錯。每一個Block會在TFS中存在多份,一般為3份,并且分布在不同網段的不同DataServer上。對于每一個寫入請求,必須在所有的Block寫入成功才算成功。當出現磁盤損壞DataServer宕機的時候,TFS啟動複制流程,把備份數未達到最小備份數的Block盡快複制到其他DataServer上去。TFS對每一個文件會記錄校驗crc,當客戶端發現crc和文件内容不匹配時,會自動切換到一個好的block上讀取。此後客戶端将會實現自動修複單個文件損壞的情況。
并發機制
對于同一個文件來說,多個用戶可以并發讀。
現有TFS并不支持并發寫一個文件。一個文件隻會有一個用戶在寫。這在TFS的設計裡面對應着是一個block同時隻能有一個寫或者更新操作。
文件名結構
TFS的文件名由塊号和文件号通過某種對應關系組成,最大長度為18字節。文件名固定以T開始,第二字節為該集群的編号(可以在配置項中指定,取值範圍1~9)。餘下的字節由Block ID和File ID通過一定的編碼方式得到。文件名由客戶端程序進行編碼和解碼,它映射方式如下圖:
TFS客戶程序在讀文件的時候通過将文件名轉換為BlockID和FileID信息,然後可以在!NameServer取得該塊所在!DataServer信息(如果客戶端有該Block與!DataServere的緩存,則直接從緩存中取),然後與!DataServer進行讀取操作。