b2b網(wǎng)站用戶群劃分鄭州疫情最新情況
分布式存儲發(fā)展歷程
前段時間 618 活動火熱進行,正是購物的好時機。當我們訪問這些電
商網(wǎng)站的時候,每一個商品都會有各式各樣的圖片展示介紹,這些圖
片一張兩張可以隨便丟在服務(wù)器的某個文件夾中,可是電商網(wǎng)站如此
大體量的圖片,得分門別類的進行管理。再比如我們平時瀏覽的各大
視頻網(wǎng)站的視頻,還有我們現(xiàn)在正在瀏覽的 CSDN 上的各類文章,都
需要在服務(wù)器上分門別類的管理好。
在文件管理早期的時候,由于文件本身的數(shù)量和占用空間都比較小,
往往在一臺服務(wù)器上既有程序在運行,也有文件在存儲。隨著互聯(lián)網(wǎng)
的不斷發(fā)展,現(xiàn)在的程序越做越大,圖片的內(nèi)容和數(shù)量也越來越多,
不斷的侵蝕服務(wù)器有限的資源,進而影響到程序本身運行的穩(wěn)定性。

于是,越來越多的系統(tǒng)在最初設(shè)計,或者升級改造的時候,選擇將文
件的存儲單獨拎出來放在一臺專用的文件服務(wù)器上。和程序服務(wù)器相
互獨立,相互不受影響。文件服務(wù)器的功能也相對比較單一,只需要
對文件進行管理即可。

隨著圖片的數(shù)量越來越多,單個圖片自身占用的空間越來越大,單臺
服務(wù)器對于圖片的承載壓力也越來越大,就需要拓寬服務(wù)器的數(shù)量,
通過更多的圖片服務(wù)器存儲文件。這樣雖然解決了文件的存儲問題,
但是卻產(chǎn)生了一個新的問題:怎么從這么多的機器中快速的找尋到需
要的那張圖片?于是便引申出了分布式存儲的概念,在眾多的機器之
中,如何講文件放進去,如何講文件取出來。
常見的分布式存儲框架
什么是 FastDFS?
FastDFS 是前阿里的一位大神余慶開源的一個輕量級分布式文件系
統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問
(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。
特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。
FastDFS 為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負載均衡、線性
擴容等機制,并注重高可用、高性能等指標,使用 FastDFS 很容易搭
建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。

?
FastDFS 服務(wù)端有兩個角色:跟蹤器( tracker )和存儲服務(wù)器
( storage )。跟蹤器主要做調(diào)度工作,在訪問上起負載均衡的作用。
存儲服務(wù)器存儲文件,完成文件管理的所有功能:就是這樣的存儲、
同步和提供存取接口, FastDFS 同時對文件的 metadata 進行管理。
所謂文件的 metadata 就是文件的相關(guān)屬性,以鍵值對( key value )
方式表示,如: width=1024 ,其中的 key 為 width , value 為 1024 。
文件 metadata 是文件屬性列表,可以包含多個鍵值對。
很多人可能不太理解為什么要設(shè)計 tracker 這個角色,當存儲服務(wù)器由
很多個物理機器組成時。客戶端要上傳 / 下載文件的時候,不知道文件
上傳 / 下載到哪個具體的機器。于是客戶端會先請求 tracker , tracker
會返回具體的 group 和 group 中的具體主機信息。客戶端拿著這個具
體的主機信息去請求相應(yīng)的主機進行文件的上傳 / 下載。
?
?
跟蹤器和存儲節(jié)點都可以由一臺或多臺服務(wù)器構(gòu)成。跟蹤器和存儲節(jié)
點中的服務(wù)器均可以隨時增加或下線而不會影響線上服務(wù)。其中跟蹤
器中的所有服務(wù)器都是對等的,可以根據(jù)服務(wù)器的壓力情況隨時增加
或減少。
為了支持大容量,存儲節(jié)點(服務(wù)器)采用了分組(或分卷)的組織
方式: group 。存儲系統(tǒng)由一個或多個 group 組成, group 與 group 之
間的文件是相互獨立的,所有 group 的文件容量累加就是整個存儲系
統(tǒng)中的文件容量。一個 group 可以由一臺或多臺存儲服務(wù)器組成,一
個 group 下的存儲服務(wù)器中的文件都是相同的, group 中的多臺存儲
服務(wù)器起到了冗余備份和負載均衡的作用。
在 group 中增加服務(wù)器時,同步已有的文件由系統(tǒng)自動完成,同步完
成后,系統(tǒng)自動將新增服務(wù)器切換到線上提供服務(wù)。當存儲空間不足
或即將耗盡時,可以動態(tài)添加 group 。只需要增加一臺或多臺服務(wù)器,
并將它們配置為一個新的卷,這樣就擴大了存儲系統(tǒng)的容量。 FastDFS
中的文件標識分為兩個部分:組名和文件名,二者缺一不可。
?
FastDFS 的安裝與部署?
FastDFS 開源的地址在 GitHub 上: https://github.com/happyfish10
0
源碼安裝要將對應(yīng)的源碼下載后編譯運行安裝,當然圖省事的話可以
直接使用 docker 快速安裝。先看使用 docker 的情況下如何快速安
裝,畢竟很多人應(yīng)該對源碼編譯安裝沒啥興趣。
docker 安裝
首先,查詢 docker 中關(guān)于 FastDFS 有哪些可用的鏡像: docker
search fastdfs

選擇需要的鏡像,拉取到本地:docker pull delron/fastdfs
?
鏡像文件并不大,本身只有 400+M
?
通過 Docker 命令來創(chuàng)建 Tracker 服務(wù):
docker run -d --name tracker --network=host -v
/mydata/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
tracker 服務(wù)默認的端口為 22122 , -v 實現(xiàn)了 docker 中的容器和本地
目錄之間的掛載。所以在執(zhí)行 docker 命令前應(yīng)手動先將本地的
/mydata/fastdfs/tracker 目錄創(chuàng)建好。

?
Tracker 服務(wù)創(chuàng)建成功之后,繼續(xù)通過 docker 的命令創(chuàng)建 Storage 服
務(wù):
docker run -d --name storage --network=host -e
TRACKER_SERVER=192.168.29.128:22122 -v
/mydata/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1
delron/fastdfs storage
在執(zhí)行上面命令的時候要注意對應(yīng)的修改下,其中
TRACKER_SERVER 中的 IP 要修改為你的 Tracker 服務(wù)所在的服務(wù)
IP 地址。并且同樣的,先手動將 / mydata/fastdfs/storage 目錄創(chuàng)建
好。

默認情況下在 Storage 服務(wù)中是已經(jīng)預(yù)裝了 Nginx 服務(wù)的,相關(guān)的端
口為 8888 ; Storage 自身的端口默認是 23000 。當然如果你發(fā)現(xiàn)這些
相關(guān)的端口被占用了,或者想要對應(yīng)的修改端口信息也可以,需要進
入容器中查看下相關(guān)的配置文件信息。
進入 Storage 服務(wù)的容器中: docker exec -it d4926e8325e3 bash
在容器中的 /etc/fdfs/ 目錄下找到 storage.conf 配置文件
?
可以看到在配置文件的最后一行指定了 http 的端口:
?
除此之外,還得再來到容器中的 /usr/local/nginx/conf 目錄下,將
nginx.conf 配置文件中的 8888 端口一并更改:

Tracker 和 Storage 服務(wù)安裝完成之后,在服務(wù)器的 Storage 本地目錄
中放幾張用于測試上傳的圖片。因為之前在啟動的時候,已經(jīng)將本地
目錄和 docker 目錄進行了一個掛載,所以當進入到 docker 中的
Storage 服務(wù)中,依然可以看到本地目錄中的測試圖片:
?
?
?
使用服務(wù)原生的 / usr/bin/fdfs_upload_file 命令進行文件上傳:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf face2face1.jpg

上傳成功之后,返回已上傳成功的圖片信息。這張圖片存于 group1 組
中, /M00/00/00 / 目錄下,重命名為
wKgggGSD2feAXsv4AER92Sd_dzk072.jpg 。然后拿著這串圖片地
址,使用瀏覽器訪問: http://192.168.29.128:8888/group1/M00/00/0
0/wKgggGSD2feAXsv4AER92Sd_dzk072.jpg

?
可以成功拿到這張上傳的圖片則說明 FastDFS 服務(wù)安裝成功。因為
Storage 服務(wù)中已經(jīng)安裝了 Nginx 服務(wù),所以訪問圖片的端口就是
Nginx 監(jiān)聽的 8888 端口,經(jīng)過 Nginx 的代理拿到上傳的那張圖片。
注意: 如果無法訪問照片的路徑,可能是 linux 防火墻的問題,把
Nginx 、 storage 、 tracker 的端口打開,再重啟鏡像服務(wù)就好
springboot整合fastdfs?
?
?
?
?
?
2.4 測試文件上傳
?
從上圖中可以,實現(xiàn)了文件的上傳和縮略圖的生成。
2.5 文件下載
?
?