一、FastDFS是什麼
FastDFS是一個開源的輕量級分佈式文件系統,純C實現,支持Linux、FreeBSD等UNIX系統,FastDFS能夠看作是基於文件的key value pair存儲系統。
FastDFS有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要作調度工做,在訪問上起負載均衡的做用。存儲節點存儲文件,完成文件管理的全部功能:存儲、同步和提供存取接口,同時對文件的metadata進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key valuepair)方式表示,如:width=1024,其中的key爲width,value爲1024。文件metadata是文件屬性列表,能夠包含多個鍵值對。
二、FastDFS的特色
分組存儲,靈活簡潔
對等結構,不存在單點
文件ID由FastDFS生成,做爲文件訪問憑證。
FastDFS不須要傳統的name server
和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊
大、中、小文件都可以很好支持,支持海量小文件存儲
支持相同文件內容只保存一份,節省存儲空間
存儲服務器上能夠保存文件附加屬性
支持多塊磁盤,支持單盤數據恢復
三、FastDFS架構圖以下:

跟蹤器和存儲節點均可以由一臺或多臺服務器構成。跟蹤器和存儲節點中的服務器都可以隨時增長或下線而不會影響線上服務。其中跟蹤器中的全部服務器都是對等的,能夠根據服務器的壓力狀況隨時增長或減小。
爲了支持大容量,存儲節點(服務器)採用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,全部卷的文件容量累加就是整個存儲系統中的文件容量。一個卷能夠由一臺或多臺存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗餘備份和負載均衡的做用。在卷中增長服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,能夠動態添加捲。只須要增長一臺或多臺服務器,並將它們配置爲一個新的卷,這樣就擴大了存儲系統的容量。
FastDFS中的文件標識分爲兩個部分:卷名和文件名,兩者缺一不可。
四、FastDFS實現過程
上傳文件交互過程:

1. Client詢問Tracker server上傳到的Storage server;
2. Tracker server返回一臺可用的Storage server,返回的數據爲該Storage server的IP地址和端口;
3. Client直接和該Storage server創建鏈接,進行文件上傳,Storage server返回新生成的文件ID,文件上傳結束。html
下載文件交互過程:

1. Client詢問Tracker server能夠下載指定文件的Storage server,參數爲文件ID(包含組名和文件名);
2. Tracker server返回一臺可用的Storage server;
3. Client直接和該Storage server創建鏈接,完成文件下載。nginx
五、同步機制
同一組內的storage server之間是對等的,文件上傳、刪除等操做能夠在任意一臺storage server上進行;
文件同步只在同組內的storage server之間進行,採用push方式,即源服務器同步給目標服務器;
源頭數據才須要同步,備份數據不須要再次同步,不然就構成環路了;
上述第二條規則有個例外,就是新增長一臺storage server時,由已有的一臺storage server將已有的全部數據(包括源頭數據和備份數據)同步給該新增服務器。
來自
http://bbs.chinaunix.net/thread-3674148-1-4.html