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