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