學(xué)習目標
1)了解分布式文件系統(tǒng)的概念及應(yīng)用場景
2)理解fastDFS的工作原理
3)掌握fastDFS存取文件方法
4)基于SpringBoot+fastDSf+vue.js實現(xiàn)圖片服務(wù)
1 什么是分布式文件系統(tǒng)
1.1 技術(shù)應(yīng)用場景
傳智播客擁有大量優(yōu)質(zhì)的視頻教程,并且免費提供給用戶去下載,文件太多如何高效存儲?用戶訪問量大如何保證下載速度?今天講解的分布式文件系統(tǒng)將解決這些問題。

1.2 什么是分布式文件系統(tǒng)
1.2.1什么是文件系統(tǒng)
引用"百度百科"中的描述:
總結(jié):文件系統(tǒng)是負責管理和存儲文件的系統(tǒng)軟件,它是操作系統(tǒng)和硬件驅(qū)動之間的橋梁,操作系統(tǒng)通過文件系統(tǒng)提供的接口去存取文件,用戶通過操作系統(tǒng)訪問磁盤上的文件。如下圖:
常見的文件系統(tǒng):FAT16/FAT32、NTFS、HFS、UFS、APFS、XFS、Ext4等 。
思考:如果沒有文件系統(tǒng)我們該怎么管理自己的文件?

1.2.2什么是分布式文件系統(tǒng)
引用"百度百科"中的描述:
為什么會有分布文件系統(tǒng)呢?
分布式文件系統(tǒng)是面對互聯(lián)網(wǎng)的需求而產(chǎn)生,互聯(lián)網(wǎng)時代對海量數(shù)據(jù)如何存儲?靠簡單的增加硬盤的個數(shù)已經(jīng)滿足不了我們的要求,因為硬盤傳輸速度有限但是數(shù)據(jù)在急劇增長,另外我們還要要做好數(shù)據(jù)備份、數(shù)據(jù)安全等。
采用分布式文件系統(tǒng)可以將多個地點的文件系統(tǒng)通過網(wǎng)絡(luò)連接起來,組成一個文件系統(tǒng)網(wǎng)絡(luò),結(jié)點之間通過網(wǎng)絡(luò)進行通信,一臺文件系統(tǒng)的存儲和傳輸能力有限,我們讓文件在多臺計算機上存儲,通過多臺計算共同傳輸。如下圖:
好處:
1、一臺計算機的文件系統(tǒng)處理能力擴充到多臺計算機同時處理。
2、一臺計算機掛了還有另外副本計算機提供數(shù)據(jù)。
3、每臺計算機可以放在不同的地域,這樣用戶就可以就近訪問,提高訪問速度。
1.3 主流的分布式文件系統(tǒng)
1、NFS
1)在客戶端上映射NFS服務(wù)器的驅(qū)動器。
2)客戶端通過網(wǎng)絡(luò)訪問NFS服務(wù)器的硬盤完全透明。
2、GFS
1)GFS采用主從結(jié)構(gòu),一個GFS集群由一個master和大量的chunkserver組成。

2)master存儲了數(shù)據(jù)文件的元數(shù)據(jù),一個文件被分成了若干塊存儲在多個chunkserver中。
3)用戶從master中獲取數(shù)據(jù)元信息,從chunkserver存儲數(shù)據(jù)。

3、HDSF
1)HDFS采用主從結(jié)構(gòu),一個HDFS集群由一個名稱結(jié)點和若干數(shù)據(jù)結(jié)點組成。
名稱結(jié)點存儲數(shù)據(jù)的元信息,一個完整的數(shù)據(jù)文件分成若干塊存儲在數(shù)據(jù)結(jié)點。
2)客戶端從名稱結(jié)點獲取數(shù)據(jù)的元信息及數(shù)據(jù)分塊的信息,得到信息客戶端即可從數(shù)據(jù)塊來存取數(shù)據(jù)。
1.4分布式文件服務(wù)提供商
1)阿里的OSS

2)七牛云存儲
3)百度云存儲
2 什么是fastDFS
2.1 fastDSF介紹
FastDFS是用C語言編寫的一款開源的分布式文件系統(tǒng),它是由淘寶資深架構(gòu)師余慶編寫并開源。FastDFS專為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
為什么要使用fastDFS呢?
上邊介紹的NFS、GFS都是通用的分布式文件系統(tǒng),通用的分布式文件系統(tǒng)的優(yōu)點的是開發(fā)體驗好,但是系統(tǒng)復(fù)雜性高、性能一般,而專用的分布式文件系統(tǒng)雖然開發(fā)體驗性差,但是系統(tǒng)復(fù)雜性低并且性能高。fastDFS非常適合存儲圖片等那些小文件,fastDFS不對文件進行分塊,所以它就沒有分塊合并的開銷,fastDFS網(wǎng)絡(luò)通信采用socket,通信速度很快。
2.2 fastDSF工作原理
2.2.1 fastDSF架構(gòu)
FastDFS架構(gòu)包括 Tracker server和Storageserver。客戶端請求Tracker server進行文件上傳、下載,通過Trackerserver調(diào)度最終由Storage server完成文件上傳和下載。
如下圖:

1)Tracker
Tracker Server作用是負載均衡和調(diào)度,通過Tracker server在文件上傳時可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù)。可以將tracker稱為追蹤服務(wù)器或調(diào)度服務(wù)器。
FastDFS集群中的Tracker server可以有多臺,Tracker server之間是相互平等關(guān)系同時提供服務(wù),Tracker server不存在單點故障。客戶端請求Tracker server采用輪詢方式,如果請求的tracker無法提供服務(wù)則換另一個tracker。
2)Storage
Storage Server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務(wù)器上,Storage server沒有實現(xiàn)自己的文件系統(tǒng)而是使用操作系統(tǒng)的文件系統(tǒng)來管理文件。可以將storage稱為存儲服務(wù)器。
Storage集群采用了分組存儲方式。storage集群由一個或多個組構(gòu)成,集群存儲總?cè)萘繛榧褐兴薪M的存儲容量之和。一個組由一臺或多臺存儲服務(wù)器組成,組內(nèi)的Storage server之間是平等關(guān)系,不同組的Storage server之間不會相互通信,同組內(nèi)的Storage server之間會相互連接進行文件同步,從而保證同組內(nèi)每個storage上的文件完全一致的。一個組的存儲容量為該組內(nèi)存儲服務(wù)器容量最小的那個,由此可見組內(nèi)存儲服務(wù)器的軟硬件配置最好是一致的。
采用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由tracker進行調(diào)度選擇。一個分組的存儲服務(wù)器訪問壓力較大時,可以在該組增加存儲服務(wù)器來擴充服務(wù)能力(縱向擴容)。當系統(tǒng)容量不足時,可以增加組來擴充存儲容量(橫向擴容)。
3)Storage狀態(tài)收集
Storage server會連接集群中所有的Tracker server,定時向他們報告自己的狀態(tài),包括磁盤剩余空間、文件同步狀況、文件上傳下載次數(shù)等統(tǒng)計信息。
2.2.2文件上傳流程

客戶端上傳文件后存儲服務(wù)器將文件ID返回給客戶端,此文件ID用于以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名。
- 組名:文件上傳后所在的storage組名稱,在文件上傳成功后有storage服務(wù)器返回,需要客戶端自行保存。
- 虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應(yīng)。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
- 數(shù)據(jù)兩級目錄:storage服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄,用于存儲數(shù)據(jù)文件。
- 文件名:與文件上傳時不同。是由存儲服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲服務(wù)器IP地址、文件創(chuàng)建時間戳、文件大小、隨機數(shù)和文件拓展名等信息。
2.2.3%20文件下載流程
tracker根據(jù)請求的文件路徑即文件ID 來快速定義文件。
比如請求下邊的文件:

1.通過組名tracker能夠很快的定位到客戶端需要訪問的存儲服務(wù)器組是group1,并選擇合適的存儲服務(wù)器提供客戶端訪問。
2.存儲服務(wù)器根據(jù)"文件存儲虛擬磁盤路徑"和"數(shù)據(jù)文件兩級目錄"可以很快定位到文件所在目錄,并根據(jù)文件名找到客戶端需要訪問的文件。
3 fastDFS入門
3.1fastDFS安裝與配置
3.1.1fastDFS安裝
tracker和storage使用相同的安裝包,fastDFS的下載地址在github.com/hAppyfish100/FastDFS
本教程下載:FastDFS_v5.05.tar.gz
FastDFS是C語言開發(fā),建議在linux上運行,本教程使用centos7作為安裝環(huán)境。
安裝細節(jié)請參考 "fastDFS安裝教程.doc"。
3.1.2Tracker配置
fastDFS的配置文件目錄 :/etc/fdfs
主要的配置文件:/etc/fdfs/tracker.conf (tracker配置文件 );storage.conf(storage配置文件)

tracker.conf配置內(nèi)容如下:
端口:port=22122
tracker 基礎(chǔ)目錄:base_path=/home/fastdfs,tracker在運行時會向此目錄存儲storage的管理數(shù)據(jù)。
3.1.3storage配置
storage.conf配置 內(nèi)容如下:
組名:group_name=group1
端口:port=23000
向tracker心跳間隔(秒):heart_beat_interval=30
storage基礎(chǔ)目錄:base_path=/home/fastdfs
磁盤存儲目錄:
store_path0=/home/fastdfs/fdfs_storage 此目錄下存儲上傳的文件,在/home/fastdfs/fdfs_storage/data下
store_path1=...
...
有多個磁盤就定義多個store_path
上報tracker的地址:tracker_server=192.168.101.64:22122
如果有多個tracker則配置多個tracker,比如:
tracker_server=192.168.101.64:22122
tracker_server=192.168.101.65:22122
....
3.1.4啟動停止
fastDFS啟動/停止腳本目錄:
fdfs_trackerd:tracker腳本,通過此腳本對 tracker進行啟動和停止
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

fdfs_storaged:storage腳本,通過此腳本對 storage進行啟動和停止
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
3.2 文件上傳下載測試
3.2.1搭建環(huán)境
這里我們使用JAVAApi測試文件的上傳。
java版本的fastdfs-client地址在:github.com/happyfish100/fastdfs-client-java,參考此工程編寫測試用例。
1)創(chuàng)建maven工程
2)添加依賴

3) 配置 文件
在classpath:config下創(chuàng)建fastdfs-client.properties文件

3.2.2 文件上傳

3.2.3 文件查詢

3.2.4 文件下載

4 文件服務(wù)案例
4.1 目標
通過文件服務(wù)案例達到以下目標:
1、理解fastDFS在實際項目中的使用方法。
2、能夠使用fastDSF實現(xiàn)圖片服務(wù)器。
4.2需求分析

說明如下:
1、管理員在管理系統(tǒng)中上傳圖片到fastDFS文件系統(tǒng)。
1)管理員進入管理系統(tǒng),點擊上傳圖片,選擇本地圖片
2)選擇本地圖片后,進行上傳,前端瀏覽器會通過http調(diào)用文件管理服務(wù)的文件上傳接口進行上傳
3)文件管理服務(wù)通過socket請求fastDFS文件系統(tǒng)的上傳圖片,最終圖片保存在fastDFS文件系統(tǒng)中的storageserver中。
2、網(wǎng)友瀏覽免費視頻的課程圖片
1)網(wǎng)友輸入www.itcast.cn進入視頻下載頁面
2)前端瀏覽器通過圖片地址請求圖片服務(wù)器代理(Nginx)
3)圖片服務(wù)器代理根據(jù)負載情況將圖片瀏覽請求轉(zhuǎn)發(fā)到一臺storage server
4)storage server找到圖片后通過nginx將圖片響應(yīng)給網(wǎng)友
4.3 功能開發(fā)
4.3.1 搭建fastDFS文件服務(wù)器
1)安裝fastDFS tracker和storage略
2)在storage server上安裝nginx
在storage server上安裝nginx的目的是對外通過http訪問storage server上的文件。
使用nginx的模塊FastDFS-nginx-module,它的作用是通過http方式訪問storage中的文件,當storage本機沒有要找的文件時向源storage主機代理請求文件。
詳細參見 fastDFS安裝教程
3)在安裝圖片服務(wù)代理
圖片服務(wù)代理的作用是負載均衡,根據(jù)storage server的負載情況將圖片瀏覽請求均勻的轉(zhuǎn)發(fā)到storage server上。
4.3.2 搭建文件管理服務(wù)
文件管理服務(wù)提供通過http方式上傳文件,刪除文件、查詢文件的功能,管理員通過文件管理服務(wù)對文件服務(wù)器上的文件進行管理。
文件管理服務(wù)采用Spring Boot開發(fā),文件管理服務(wù)通過與fastDFS交互最終將用戶上傳的文件存儲到fastDFS上。
在fastDFS入門程序上繼續(xù)開發(fā):
1)創(chuàng)建模型


2)創(chuàng)建controller

3)創(chuàng)建application.yml

4)創(chuàng)建spring boot啟動類

4.3.3 管理系統(tǒng)前端
管理員通過管理系統(tǒng)前端上傳文件、查詢文件、刪除文件等操作。
管理系統(tǒng)前端與文件管理服務(wù)器通過http交互,這當前流行的前后端分離的架構(gòu)。
管理系統(tǒng)前端采用當前瀏覽器的vue.js前端框架實現(xiàn)。
1、創(chuàng)建前端工程
使用webstorm創(chuàng)建前端工程
工程需要導(dǎo)入vue.js及element-ui

2、創(chuàng)建upload.html
該文件實現(xiàn)文件上傳及預(yù)覽
1)導(dǎo)入js及 css

2)創(chuàng)建vue實例

3)添加element-ui的文件上傳組件

定義數(shù)據(jù)對象及方法 :


4)配置 nginx虛擬目錄

5)測試

4.3.4 課程圖片瀏覽
網(wǎng)友(學(xué)習者)輸入www.itcast.cn網(wǎng)址進入免費視頻下載頁面,瀏覽器根據(jù)頁面上的圖片地址請求圖片服務(wù)代理,由代理將請求轉(zhuǎn)發(fā)到fastDFS storage server上,最終在瀏覽器看到圖片。
上章節(jié)實現(xiàn)圖片上傳后已經(jīng)實現(xiàn)圖片的預(yù)覽,本功能實現(xiàn)略。
5 總結(jié) 通過本次課程的學(xué)習您要達到以下目標:
1)了解分布式文件系統(tǒng)的概念及應(yīng)用場景
分布式文件系統(tǒng)是通過網(wǎng)絡(luò)將單機上的文件系統(tǒng)組成一個網(wǎng)絡(luò)文件系統(tǒng)。
分布式文件系統(tǒng)主要應(yīng)用在大型互聯(lián)網(wǎng)項目中,實現(xiàn)圖片存儲、音視頻存儲等服務(wù)。
分布式文件系統(tǒng)的優(yōu)點:可以快速擴容存儲,提高文件訪問速度。
2)理解fastDFS的工作原理
fastDFS由tracker和storage組成,它們都可以部署集群。
tracker負責調(diào)度,storage負責存儲。
3)掌握fastDFS存取文件方法
客戶端與fastDFS采用socket協(xié)議通信,可以采用官方提供的java版本的fastDSF-client快速開發(fā)。
4)能夠動手搭建一個fastDSF文件服務(wù)器