閱讀440 返回首頁    go 阿裏雲 go 技術社區[雲棲]


TFS分布式文件係統應用

TFS是淘寶開源的一套高性能文件存儲係統,在阿裏廣泛應用,
除了自建文件係統,在應用上雲的大趨勢下,還可以使用阿裏雲的對象存儲OSS服務:
阿裏雲對象存儲OSS首頁

一、關於TFS

TFS(Taobao File System)是一個高可擴展、高可用、高性能、麵向互聯網服務的分布式文件係統,主要針對海量的非結構化數據,它構築在普通的Linux機器集群上,可為外部提供高可靠和高並發的存儲訪問。
TFS為淘寶提供海量小文件存儲,通常文件大小不超過1M,滿足了淘寶對小文件存儲的需求,被廣泛地應用在淘寶各項應用中。

TFS采用了HA架構和平滑擴容,保證了整個文件係統的可用性和擴展性。同時扁平化的數據組織結構,可將文件名映射到文件的物理地址,簡化了文件的訪問流程,一定程度上為TFS提供了良好的讀寫性能。

TFS開源首頁:https://tfs.taobao.org/

二、TFS架構設計

TFS集群由NamServer和DataServer組成,以block(通常為64M,可配置)為單位存儲和組織數據。

structure

1)NameServer

NameServer主要管理維護Block和DataServer相關信息,包括DataServer加入,退出, 心跳信息, block和DataServer的對應關係建立,解除。
正常情況下,一個塊會在DataServer上存在, 主NameServer負責Block的創建,刪除,複製,均衡,整理, NameServer不負責實際數據的讀寫,實際數據的讀寫由DataServer完成。

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

2)DataServer

DataServer主要負責實際數據的存儲和讀寫。
TFS會將多個小文件存儲在同一個block中,並為block建立索引,以便快速在block中定位文件;每個block會存儲多個副本到不同的機架上,以保證數據的高可靠性。

三、TFS讀寫操作

1.TFS寫操作數據流

TFS係統中,nameserver會保證一個文件有多個副本存儲於不同的dataserver上以保證冗餘。當由於dataserver服務器宕機或由於其他原因退出係統導致某些文件副本數量下降時,nameserver將會調度新的dataserver節點存儲文件備份。同樣為了保證數據一致性,當寫入一個文件時,隻有所有參與的dataserver均寫入成功時,該操作才算成功。

TFS的寫操作數據流圖如下所示:

process

1)客戶端向nameserver發起寫請求,nameserver返回一個dataserver列表

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

2)客戶端向master dataserver開始數據寫入操作

master server將數據傳輸為其他的dataserver節點,隻有當所有dataserver節點寫入均成功時,master server才會向nameserver和客戶端返回操作成功的信息。

2.TFS讀操作數據流

tfs_read

1)獲得Block ID和File ID

根據TFS文件名解析出Block ID和block中的File ID。

2)獲取dataserver地址

向nameserver發送查詢請求得到Block ID所在的dataserver地址。
由於nameserver中維護了block和dataserver的對應關係,所以nameserver能夠提供相應的信息。
Note: 由於TFS是把大量小文件放在一個block裏麵,
所以TFS的文件複製是基於block的,而且複製出來的block的block id應該是一致的。

3)請求文件

通過發送Block_ID、File_ID和offset為參數的讀請求到對應的dataserver,得到文件內容。
dataserver會根據本地記錄的信息來得到File ID所在block的偏移量,從而讀取到正確的文件內容。

四、分布式文件係統橫向對比

常見的分布式文件係統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自適用於不同的領域。它們都不是係統級的分布式文件係統,而是應用級的分布式文件存儲服務。

1.Lustre

Lustre是一個大規模的、安全可靠的,具備高可用性的集群文件係統,它是由SUN公司開發和維護的。
該項目主要的目的就是開發下一代的集群文件係統,可以支持超過10000個節點,數以PB的數據量存儲係統。
目前Lustre已經運用在一些領域,例如HP SFS產品等。

2.MogileFS

由memcahed的開發公司danga一款perl開發的產品,目前國內使用mogielFS的有圖片托管網站yupoo等。
MogileFS是一套高效的文件自動備份組件,由Six Apart開發,廣泛應用在包括LiveJournal等web2.0站點上。

3.FastDFS

是一款類似Google FS的開源分布式文件係統,是純C語言開發的。
FastDFS是一個開源的輕量級分布式文件係統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。

官方論壇

FastDfs google Code

分布式文件係統FastDFS架構剖析

4.GridFS文件係統

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

最後更新:2017-10-13 23:03:43

  上一篇:go  【雲棲大會】阿裏人工智能實驗室發布AR開放平台正式進軍機器視覺
  下一篇:go  阿裏雲麵向企業效率的雲上產品全解析——雲唿叫中心