分佈式存儲 FastDFS 詳解
大家好,這裏是微微一笑,公衆號【碼易有道】~~~
今天主要介紹 FastDFS 分佈式文件存儲。
場景切入
在大型網站中由於用戶數和存儲內容較多, 存在大容量文件存儲的場景,例如圖片、視頻、日誌、文件等。如何保證這些資源的高可用性和快速訪問,從而提升用戶體驗和網站性能?
分佈式存儲的由來
我們知道,根據業務體量的增大,一般分佈式的設計是從單體應用演進開始的。最初,在單體項目中,
早期用戶量可能比較少,整個系統的一個架構:服務代碼跟我們的文件資源信息都存儲在了一個服務器上面。
隨着用戶量越來越多,那麼存儲文件越來越多,本身服務器可能就只有比如:100G 的磁盤空間,文件服務器裏面存儲的東西越來越多。那麼,它會影響到整個服務器的資源的一個分配。
有人想,把我們這個文件服務器單獨的給拆出來,作爲一個單獨服務器
上邊實現了資源文件和代碼的解耦。但是資源文件的存儲量美譽得到根本性的解決。
於是,我們就需要拓寬服務器,我拓寬到 10 臺,20 臺。。。其實就是要說的這個分佈式文件存儲系統。
常見的分佈式存儲框架
本章重點介紹 FastDFS。
FastDFS 分佈式存儲
簡介
官方介紹:
FastDFS 是一個開源的分佈式文件系統,特別適合於大容量文件存儲的場景,例如圖片、視頻、日誌、文件等。是一個開源的高性能分佈式文件
系統,專爲解決大容量存儲
和負載均衡
問題而設計。
中文官網 [1] 英文官網 [2] 學習地址 [3] 下載地址 [4] 源碼包 [5] 性能測試 [6]Gitee 主頁 [7]
它具備以下核心功能:
-
文件存儲:能夠存儲大量數據文件。
-
文件同步:確保文件在系統內的多個副本之間保持一致。
-
文件訪問:支持用戶上傳和下載文件。
FastDFS 功能特性
-
分組存儲,簡單靈活;
-
對等結構,不存在單點;
-
文件 ID 由 FastDFS 生成,作爲文件訪問憑證。
-
大、中、小文件均可以很好支持,可以存儲海量小文件;
-
一臺 storage 支持多塊磁盤,支持單盤數據恢復;
-
提供了 nginx 擴展模塊,可以和 nginx 無縫銜接;
-
支持多線程方式上傳和下載文件,支持斷點續傳;
-
存儲服務器上可以保存文件附加屬性。
FastDFS 架構及工作原理
架構設計:
工作原理:
-
Client 客戶端
:實際項目的訪問客戶端。 -
Tracker Server
: 跟蹤服務器, 主要做調度工作, 在訪問上起負載均衡
的作用。在內存中記錄集羣中 group 和 storage server 的狀態信息,是連接 client 和 Storage server 的樞紐。 -
Storage Server
: 存儲服務器, 文件和文件屬性 (meta data) 都保存到存儲服務器上。其功能包括:
-
文件存儲:保存上傳的文件數據。
-
文件同步:在多個存儲節點之間同步文件,以保證數據一致性。
-
提供文件訪問接口:允許用戶通過 API 進行文件操作。
-
管理元數據:存儲文件的相關屬性,以鍵值對的形式,例如圖像的寬度可以表示爲
width=1024
。
問題思考
如何上傳文件?
上傳文件過程描述:
-
客戶端需要上傳或下載文件,向 FastDFS 系統發起請求。
-
連接到 FastDFS 的跟蹤器服務器。跟蹤器負責調度和負載均衡。
-
跟蹤器接收到客戶端的請求後,會根據當前的負載情況和存儲策略,選擇一個合適的存儲服務器。
-
跟蹤器將所選存儲服務器的
IP地址和端口號
發送給客戶端。 -
客戶端根據跟蹤器提供的 IP 地址和端口號,直接與選定的存儲服務器建立連接。
-
客戶端將文件內容和元數據發送給存儲服務器。元數據可能包括
文件卷名(volume)和文件名
等信息。 -
存儲服務器接收到文件後,將其保存在本地磁盤上,並根據 FastDFS 的配置
創建多個副本
,可能在同一個存儲組
內的其他服務器上。 -
文件存儲完成後,存儲服務器會向客戶端發送響應,確認文件上傳成功或提供下載鏈接。
-
客戶端收到存儲服務器的響應後,完成文件上傳或下載操作。
如何下載文件?
文件下載過程描述:
-
客戶端想要獲取存儲在 FastDFS 系統中的文件,向系統發起下載請求。
-
發送請求到 FastDFS 的跟蹤器服務器。跟蹤器負責管理文件的元數據,並知道文件存儲的位置。
-
跟蹤器接收到客戶端的請求後,根據文件的卷名(volume name)和文件名(filename)查找文件存儲信息。
-
跟蹤器確定文件所在的存儲服務器,並將該服務器的 IP 地址和端口號返回給客戶端。
-
客戶端使用跟蹤器返回的 IP 地址和端口號,直接與存儲服務器建立連接。
-
客戶端向存儲服務器發送文件下載請求,包括卷名和文件名。
-
存儲服務器接收到請求後,根據提供的卷名和文件名檢索文件。
-
一旦找到文件,存儲服務器將文件內容發送回客戶端。
-
客戶端接收到文件內容,下載流程完成。
如何保證高可用?
FastDFS 設計爲一個多副本分佈式文件系統。多副本
機制是 FastDFS 保證數據可靠性
和容錯能力
的關鍵。
幾個關鍵點:
-
至少有一個副本,或者多個。
-
文件和文件副本位於同一個組(Group)或者叫卷(Volume)
-
不同卷之間有效的資源隔離
-
文件和文件副本位於不同的機器上,如圖:副本 i,副本 ii... 位於不同的主機上,對應不同的 ip 和 port
-
同步機制:同步和異步兩種方式
-
自動副本同步: 當向存儲組添加新的存儲服務器時,現有文件的副本會自動同步到新服務器上。
通過以上設計提高容錯能力和單點故障問題,保證高可用。
如何解決性能瓶頸?
我們在架構圖中發現,Tracker 也是分佈式部署, 便於擴縮容。面對訪問激增的問題,可通過增加節點的方式應對。
幾個關鍵點:
-
通過增加 Tracker 服務器的數量,可以分擔請求調度和負載均衡的任務,從而提高系統的整體性能。
-
通過增加更多的存儲服務器或存儲捲來擴展存儲容量,減少單個服務器的負載。
-
根據業務需求選擇合適的同步策略,權衡同步複製的性能開銷和異步複製的延遲。
總結
文章主要介紹分佈式存儲 FastDFS 結構設計和原理和使用過程中的一些問題思考。
使用過程中 FastDFS 幾個關鍵特性的優缺點對比:
參考資料
[1] FastDFS 官網地址(中): http:www.csource.org/
[2] FastDFS 官網地址(英): http://code.google.com/p/fastdfs/
[3] 學習地址: http://bbs.chinaunix.net/forum-240-1.html
[4] 軟件包下載地址: http://sourceforge.net/projects/fastdfs/files/
[5] 源碼包下載地址: http://sourceforge.net/projects/fastdfs/files/
[6] 性能測試報告: https://www.jianshu.com/p/dd08821a2068
[7] FastDFS 的 Gitee 主頁: https://gitee.com/fastdfs100/fastdfs
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/zlaOMdNOSWnJqf15ra3x8g