分布式存儲FastDFS詳解
今天主要介紹FastDFS分布式文件存儲。
圖片
場景切入
在大型網(wǎng)站中由于用戶數(shù)和存儲內(nèi)容較多,存在大容量文件存儲的場景,例如圖片、視頻、日志、文件等。如何保證這些資源的高可用性和快速訪問,從而提升用戶體驗和網(wǎng)站性能?
圖片
分布式存儲的由來
我們知道,根據(jù)業(yè)務(wù)體量的增大,一般分布式的設(shè)計是從單體應(yīng)用演進開始的。最初,在單體項目中,
圖片
早期用戶量可能比較少,整個系統(tǒng)的一個架構(gòu):服務(wù)代碼跟我們的文件資源信息都存儲在了一個服務(wù)器上面。
隨著用戶量越來越多,那么存儲文件越來越多,本身服務(wù)器可能就只有比如:100G的磁盤空間,文件服務(wù)器里面存儲的東西越來越多。那么,它會影響到整個服務(wù)器的資源的一個分配。
有人想,把我們這個文件服務(wù)器單獨的給拆出來,作為一個單獨服務(wù)器
圖片
上邊實現(xiàn)了資源文件和代碼的解耦。但是資源文件的存儲量美譽得到根本性的解決。
于是,我們就需要拓寬服務(wù)器,我拓寬到10臺,20臺。。。其實就是要說的這個分布式文件存儲系統(tǒng)。
圖片
常見的分布式存儲框架
圖片
本章重點介紹FastDFS。
FastDFS 分布式存儲
簡介
官方介紹:
圖片
FastDFS是一個開源的分布式文件系統(tǒng),特別適合于大容量文件存儲的場景,例如圖片、視頻、日志、文件等。是一個開源的高性能分布式文件系統(tǒng),專為解決大容量存儲和負載均衡問題而設(shè)計。
中文官網(wǎng)[1]英文官網(wǎng)[2]學(xué)習(xí)地址[3]下載地址[4]源碼包[5]性能測試[6]Gitee主頁[7]
它具備以下核心功能:
- 文件存儲:能夠存儲大量數(shù)據(jù)文件。
- 文件同步:確保文件在系統(tǒng)內(nèi)的多個副本之間保持一致。
- 文件訪問:支持用戶上傳和下載文件。
FastDFS 功能特性
- 分組存儲,簡單靈活;
- 對等結(jié)構(gòu),不存在單點;
- 文件ID由FastDFS生成,作為文件訪問憑證。
- 大、中、小文件均可以很好支持,可以存儲海量小文件;
- 一臺storage支持多塊磁盤,支持單盤數(shù)據(jù)恢復(fù);
- 提供了nginx擴展模塊,可以和nginx無縫銜接;
- 支持多線程方式上傳和下載文件,支持斷點續(xù)傳;
- 存儲服務(wù)器上可以保存文件附加屬性。
FastDFS 架構(gòu)及工作原理
架構(gòu)設(shè)計:
圖片
工作原理:
- Client 客戶端:實際項目的訪問客戶端。
- Tracker Server: 跟蹤服務(wù)器,主要做調(diào)度工作,在訪問上起負載均衡的作用。在內(nèi)存中記錄集群中g(shù)roup和storage server的狀態(tài)信息,是連接client和Storage server的樞紐。
- Storage Server: 存儲服務(wù)器,文件和文件屬性(meta data)都保存到存儲服務(wù)器上。其功能包括:
- 文件存儲:保存上傳的文件數(shù)據(jù)。
- 文件同步:在多個存儲節(jié)點之間同步文件,以保證數(shù)據(jù)一致性。
- 提供文件訪問接口:允許用戶通過API進行文件操作。
- 管理元數(shù)據(jù):存儲文件的相關(guān)屬性,以鍵值對的形式,例如圖像的寬度可以表示為 width=1024。
問題思考
如何上傳文件?
圖片
上傳文件過程描述:
- 客戶端需要上傳或下載文件,向FastDFS系統(tǒng)發(fā)起請求。
- 連接到FastDFS的跟蹤器服務(wù)器。跟蹤器負責調(diào)度和負載均衡。
- 跟蹤器接收到客戶端的請求后,會根據(jù)當前的負載情況和存儲策略,選擇一個合適的存儲服務(wù)器。
- 跟蹤器將所選存儲服務(wù)器的IP地址和端口號發(fā)送給客戶端。
- 客戶端根據(jù)跟蹤器提供的IP地址和端口號,直接與選定的存儲服務(wù)器建立連接。
- 客戶端將文件內(nèi)容和元數(shù)據(jù)發(fā)送給存儲服務(wù)器。元數(shù)據(jù)可能包括文件卷名(volume)和文件名等信息。
- 存儲服務(wù)器接收到文件后,將其保存在本地磁盤上,并根據(jù)FastDFS的配置創(chuàng)建多個副本,可能在同一個存儲組內(nèi)的其他服務(wù)器上。
- 文件存儲完成后,存儲服務(wù)器會向客戶端發(fā)送響應(yīng),確認文件上傳成功或提供下載鏈接。
- 客戶端收到存儲服務(wù)器的響應(yīng)后,完成文件上傳或下載操作。
如何下載文件?
圖片
文件下載過程描述:
- 客戶端想要獲取存儲在FastDFS系統(tǒng)中的文件,向系統(tǒng)發(fā)起下載請求。
- 發(fā)送請求到FastDFS的跟蹤器服務(wù)器。跟蹤器負責管理文件的元數(shù)據(jù),并知道文件存儲的位置。
- 跟蹤器接收到客戶端的請求后,根據(jù)文件的卷名(volume name)和文件名(filename)查找文件存儲信息。
- 跟蹤器確定文件所在的存儲服務(wù)器,并將該服務(wù)器的IP地址和端口號返回給客戶端。
- 客戶端使用跟蹤器返回的IP地址和端口號,直接與存儲服務(wù)器建立連接。
- 客戶端向存儲服務(wù)器發(fā)送文件下載請求,包括卷名和文件名。
- 存儲服務(wù)器接收到請求后,根據(jù)提供的卷名和文件名檢索文件。
- 一旦找到文件,存儲服務(wù)器將文件內(nèi)容發(fā)送回客戶端。
- 客戶端接收到文件內(nèi)容,下載流程完成。
如何保證高可用?
FastDFS設(shè)計為一個多副本分布式文件系統(tǒng)。多副本機制是FastDFS保證數(shù)據(jù)可靠性和容錯能力的關(guān)鍵。
圖片
幾個關(guān)鍵點:
- 至少有一個副本,或者多個。
- 文件和文件副本位于同一個組(Group)或者叫卷(Volume)
- 不同卷之間有效的資源隔離
- 文件和文件副本位于不同的機器上,如圖:副本i,副本ii...位于不同的主機上,對應(yīng)不同的ip和port
- 同步機制:同步和異步兩種方式
- 自動副本同步: 當向存儲組添加新的存儲服務(wù)器時,現(xiàn)有文件的副本會自動同步到新服務(wù)器上。
通過以上設(shè)計提高容錯能力和單點故障問題,保證高可用。
如何解決性能瓶頸?
我們在架構(gòu)圖中發(fā)現(xiàn),Tracker 也是分布式部署,便于擴縮容。面對訪問激增的問題,可通過增加節(jié)點的方式應(yīng)對。
圖片
幾個關(guān)鍵點:
- 通過增加Tracker服務(wù)器的數(shù)量,可以分擔請求調(diào)度和負載均衡的任務(wù),從而提高系統(tǒng)的整體性能。
- 通過增加更多的存儲服務(wù)器或存儲卷來擴展存儲容量,減少單個服務(wù)器的負載。
- 根據(jù)業(yè)務(wù)需求選擇合適的同步策略,權(quán)衡同步復(fù)制的性能開銷和異步復(fù)制的延遲。
總結(jié)
文章主要介紹分布式存儲FastDFS 結(jié)構(gòu)設(shè)計和原理和使用過程中的一些問題思考。
使用過程中FastDFS幾個關(guān)鍵特性的優(yōu)缺點對比:
特性 | 優(yōu)點 | 缺點 |
架構(gòu)設(shè)計 | 易于擴展、負載均衡 | 同步延遲 |
冗余備份 | 支持在線擴容 | 存儲空間利用率不高 |
高性能 | C語言編寫,執(zhí)行效率高 | 單點性能瓶頸 |
內(nèi)存管理 | - 內(nèi)存零拷貝,減少系統(tǒng)開銷 | - 對內(nèi)存要求較高 |


























