分佈式存儲 FastDFS 詳解

大家好,這裏是微微一笑,公衆號【碼易有道】~~~

今天主要介紹 FastDFS 分佈式文件存儲。

場景切入

  在大型網站中由於用戶數和存儲內容較多, 存在大容量文件存儲的場景,例如圖片、視頻、日誌、文件等。如何保證這些資源的高可用性和快速訪問,從而提升用戶體驗和網站性能?

分佈式存儲的由來

  我們知道,根據業務體量的增大,一般分佈式的設計是從單體應用演進開始的。最初,在單體項目中,

  早期用戶量可能比較少,整個系統的一個架構:服務代碼跟我們的文件資源信息都存儲在了一個服務器上面。

  隨着用戶量越來越多,那麼存儲文件越來越多,本身服務器可能就只有比如:100G 的磁盤空間,文件服務器裏面存儲的東西越來越多。那麼,它會影響到整個服務器的資源的一個分配。

有人想,把我們這個文件服務器單獨的給拆出來,作爲一個單獨服務器

  上邊實現了資源文件和代碼的解耦。但是資源文件的存儲量美譽得到根本性的解決。

於是,我們就需要拓寬服務器,我拓寬到 10 臺,20 臺。。。其實就是要說的這個分佈式文件存儲系統。

常見的分佈式存儲框架

本章重點介紹 FastDFS。

FastDFS 分佈式存儲

簡介

官方介紹:

FastDFS 是一個開源的分佈式文件系統,特別適合於大容量文件存儲的場景,例如圖片、視頻、日誌、文件等。是一個開源的高性能分佈式文件系統,專爲解決大容量存儲負載均衡問題而設計。

中文官網 [1] 英文官網 [2] 學習地址 [3] 下載地址 [4] 源碼包 [5] 性能測試 [6]Gitee 主頁 [7]

它具備以下核心功能:

  1. 文件存儲:能夠存儲大量數據文件。

  2. 文件同步:確保文件在系統內的多個副本之間保持一致。

  3. 文件訪問:支持用戶上傳和下載文件。

FastDFS 功能特性

FastDFS 架構及工作原理

架構設計:

工作原理:

  1. 文件存儲:保存上傳的文件數據。

  2. 文件同步:在多個存儲節點之間同步文件,以保證數據一致性。

  3. 提供文件訪問接口:允許用戶通過 API 進行文件操作。

  4. 管理元數據:存儲文件的相關屬性,以鍵值對的形式,例如圖像的寬度可以表示爲 width=1024

問題思考

如何上傳文件?

上傳文件過程描述:

  1. 客戶端需要上傳或下載文件,向 FastDFS 系統發起請求。

  2. 連接到 FastDFS 的跟蹤器服務器。跟蹤器負責調度和負載均衡。

  3. 跟蹤器接收到客戶端的請求後,會根據當前的負載情況和存儲策略,選擇一個合適的存儲服務器。

  4. 跟蹤器將所選存儲服務器的IP地址和端口號發送給客戶端。

  5. 客戶端根據跟蹤器提供的 IP 地址和端口號,直接與選定的存儲服務器建立連接。

  6. 客戶端將文件內容和元數據發送給存儲服務器。元數據可能包括文件卷名(volume)和文件名等信息。

  7. 存儲服務器接收到文件後,將其保存在本地磁盤上,並根據 FastDFS 的配置創建多個副本,可能在同一個存儲組內的其他服務器上。

  8. 文件存儲完成後,存儲服務器會向客戶端發送響應,確認文件上傳成功或提供下載鏈接。

  9. 客戶端收到存儲服務器的響應後,完成文件上傳或下載操作。

如何下載文件?

文件下載過程描述:

  1. 客戶端想要獲取存儲在 FastDFS 系統中的文件,向系統發起下載請求。

  2. 發送請求到 FastDFS 的跟蹤器服務器。跟蹤器負責管理文件的元數據,並知道文件存儲的位置。

  3. 跟蹤器接收到客戶端的請求後,根據文件的卷名(volume name)和文件名(filename)查找文件存儲信息。

  4. 跟蹤器確定文件所在的存儲服務器,並將該服務器的 IP 地址和端口號返回給客戶端。

  5. 客戶端使用跟蹤器返回的 IP 地址和端口號,直接與存儲服務器建立連接。

  6. 客戶端向存儲服務器發送文件下載請求,包括卷名和文件名。

  7. 存儲服務器接收到請求後,根據提供的卷名和文件名檢索文件。

  8. 一旦找到文件,存儲服務器將文件內容發送回客戶端。

  9. 客戶端接收到文件內容,下載流程完成。

如何保證高可用?

FastDFS 設計爲一個多副本分佈式文件系統。多副本機制是 FastDFS 保證數據可靠性容錯能力的關鍵。

幾個關鍵點:

通過以上設計提高容錯能力和單點故障問題,保證高可用。

如何解決性能瓶頸?

我們在架構圖中發現,Tracker 也是分佈式部署, 便於擴縮容。面對訪問激增的問題,可通過增加節點的方式應對。

幾個關鍵點:

  1. 通過增加 Tracker 服務器的數量,可以分擔請求調度和負載均衡的任務,從而提高系統的整體性能。

  2. 通過增加更多的存儲服務器或存儲捲來擴展存儲容量,減少單個服務器的負載。

  3. 根據業務需求選擇合適的同步策略,權衡同步複製的性能開銷和異步複製的延遲。

總結

文章主要介紹分佈式存儲 FastDFS 結構設計和原理和使用過程中的一些問題思考。

使用過程中 FastDFS 幾個關鍵特性的優缺點對比:

ciqjKt

參考資料

[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