天天看點

TFS分布式檔案系統應用

TFS是淘寶開源的一套高性能檔案存儲系統,在阿裡廣泛應用,

除了自建檔案系統,在應用上雲的大趨勢下,還可以使用阿裡雲的對象存儲OSS服務:

<a href="https://help.aliyun.com/product/31815.html?spm=5176.doc31820.3.1.X4JH2G">阿裡雲對象存儲OSS首頁</a>

TFS(Taobao File System)是一個高可擴充、高可用、高性能、面向網際網路服務的分布式檔案系統,主要針對海量的非結構化資料,它構築在普通的Linux機器叢集上,可為外部提供高可靠和高并發的存儲通路。

TFS為淘寶提供海量小檔案存儲,通常檔案大小不超過1M,滿足了淘寶對小檔案存儲的需求,被廣泛地應用在淘寶各項應用中。

TFS采用了HA架構和平滑擴容,保證了整個檔案系統的可用性和擴充性。同時扁平化的資料組織結構,可将檔案名映射到檔案的實體位址,簡化了檔案的通路流程,一定程度上為TFS提供了良好的讀寫性能。

TFS叢集由NamServer和DataServer組成,以block(通常為64M,可配置)為機關存儲群組織資料。

TFS分布式檔案系統應用

NameServer主要管理維護Block和DataServer相關資訊,包括DataServer加入,退出, 心跳資訊, block和DataServer的對應關系建立,解除。

正常情況下,一個塊會在DataServer上存在, 主NameServer負責Block的建立,删除,複制,均衡,整理, NameServer不負責實際資料的讀寫,實際資料的讀寫由DataServer完成。

NameServer采用了HA結構,即兩台機器互為熱備,同時運作,一台為主,一台為備,主機綁定到對外vip,提供服務;當主機器當機後,迅速将vip綁定至備份!NameServer,将其切換為主機,對外提供服務。

DataServer主要負責實際資料的存儲和讀寫。

TFS會将多個小檔案存儲在同一個block中,并為block建立索引,以便快速在block中定位檔案;每個block會存儲多個副本到不同的機架上,以保證資料的高可靠性。

TFS系統中,nameserver會保證一個檔案有多個副本存儲于不同的dataserver上以保證備援。當由于dataserver伺服器當機或由于其他原因退出系統導緻某些檔案副本數量下降時,nameserver将會排程新的dataserver節點存儲檔案備份。同樣為了保證資料一緻性,當寫入一個檔案時,隻有所有參與的dataserver均寫入成功時,該操作才算成功。

TFS的寫操作資料流圖如下所示:

TFS分布式檔案系統應用

用戶端首先向nameserver發起寫請求,nameserver需要根據dataserver上的可寫塊,容量和負載權重平均來選擇一個可寫的block。并且在該block所在的多個dataserver中選擇一個作為寫入的master,這個選擇過程也需要根據dataserver的負載以及目前作為master的次數來計算,使得每個dataserver作為master的機會均等。master一段標明,除非master當機,不會更換,一旦master當機,需要在剩餘的dataserver中選擇新的master。傳回一個dataserver清單。

master server将資料傳輸為其他的dataserver節點,隻有當所有dataserver節點寫入均成功時,master server才會向nameserver和用戶端傳回操作成功的資訊。

TFS分布式檔案系統應用

根據TFS檔案名解析出Block ID和block中的File ID。

向nameserver發送查詢請求得到Block ID所在的dataserver位址。

由于nameserver中維護了block和dataserver的對應關系,是以nameserver能夠提供相應的資訊。

Note: 由于TFS是把大量小檔案放在一個block裡面,

是以TFS的檔案複制是基于block的,而且複制出來的block的block id應該是一緻的。

通過發送Block_ID、File_ID和offset為參數的讀請求到對應的dataserver,得到檔案内容。

dataserver會根據本地記錄的資訊來得到File ID所在block的偏移量,進而讀取到正确的檔案内容。

常見的分布式檔案系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的領域。它們都不是系統級的分布式檔案系統,而是應用級的分布式檔案存儲服務。

Lustre是一個大規模的、安全可靠的,具備高可用性的叢集檔案系統,它是由SUN公司開發和維護的。

該項目主要的目的就是開發下一代的叢集檔案系統,可以支援超過10000個節點,數以PB的資料量存儲系統。

目前Lustre已經運用在一些領域,例如HP SFS産品等。

由memcahed的開發公司danga一款perl開發的産品,目前國内使用mogielFS的有圖檔托管網站yupoo等。

MogileFS是一套高效的檔案自動備份元件,由Six Apart開發,廣泛應用在包括LiveJournal等web2.0站點上。

是一款類似Google FS的開源分布式檔案系統,是純C語言開發的。

FastDFS是一個開源的輕量級分布式檔案系統,它對檔案進行管理,功能包括:檔案存儲、檔案同步、檔案通路(檔案上傳、檔案下載下傳)等,解決了大容量存儲和負載均衡的問題。特别适合以檔案為載體的線上服務,如相冊網站、視訊網站等等。

<a href="http://bbs.chinaunix.net/forum-240-1.html">官方論壇</a>

<a href="http://code.google.com/p/fastdfs/">FastDfs google Code</a>

<a href="http://www.programmer.com.cn/4380/">分布式檔案系統FastDFS架構剖析</a>

MongoDB是一種知名的NoSql資料庫,GridFS是MongoDB的一個内置功能,它提供一組檔案操作的API以利用MongoDB存儲檔案,GridFS的基本原理是将檔案儲存在兩個Collection中,一個儲存檔案索引,一個儲存檔案内容,檔案内容按一定大小分成若幹塊,每一塊存在一個Document中,這種方法不僅提供了檔案存儲,還提供了對檔案相關的一些附加屬性(比如MD5值,檔案名等等)。