關於分散式檔案伺服器FastDFS
簡介
FastDFS是阿里用 C 語言編寫的一款開源的分散式檔案系統。

上圖可以看出他的架構包括Tracker server 和 Storage server。客戶端請求 Tracker server 進行檔案上傳、下載,通過 Tracker server 排程最終由 Storage server 完成檔案上傳和下載。
Tracker server :排程伺服器,負載均衡和排程,通過 Tracker server 在檔案上傳時可以根據一些策略找到 Storage server 提供檔案上傳服務。
Storage server :儲存伺服器,檔案儲存,客戶端上傳的檔案最終儲存在 Storage 伺服器上。
服務端兩個角色:
Tracker :管理叢集,tracker 也可以實現叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀態。
Storage :實際儲存檔案 Storage 分為多個組,每個組之間儲存的檔案是不同的。每個組內部可以有多個成員,組成員內部儲存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。
檔案上傳流程

客戶端上傳檔案後儲存伺服器將檔案 ID 返回給客戶端,此檔案 ID 用於以後訪問該檔案的索引資訊。檔案索引資訊包括:組名,虛擬磁碟路徑,資料兩級目錄,檔名。

組名:檔案上傳後所在的 storage 組名稱:group1。
虛擬磁碟路徑 :storage 配置的虛擬路徑,與磁碟選項 store_path對應。如果配置了store_path0 則是 M00,如果配置了 store_path1 則是 M01
資料兩級目錄 :storage 伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料檔案。:/02/44
檔名 :與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含:源儲存伺服器 IP 地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。(後面一長串)
檔案下載流程
電商概念
SPU(標準產品單位):iphone7就是一個SPU,與商家,與顏色、款式、套餐都無關,屬性值、特性相同的商品就可以稱為一個SPU。
SKU(庫存量單位):紡織品中一個SKU通常表示:規格、顏色、款式,物理上不可分割的最小存貨單元。
demo
1:手動引入jar包到maven本地倉庫
2:pom檔案中引入
<dependencies> <dependency> <groupId>org.csource.fastdfs</groupId> <artifactId>fastdfs</artifactId> <version>1.2</version> </dependency> </dependencies>
3:配置檔案fdfs_client.conf (可以更改伺服器地址)
# connect timeout in seconds # default value is 30s connect_timeout=30 # network timeout in seconds # default value is 30s network_timeout=60 # the base path to store log files base_path=/home/fastdfs # tracker_server can ocur more than once, and tracker_server format is #"host:port", host can be hostname or ip address tracker_server=192.168.25.133:22122 #standard log level as syslog, case insensitive, value list: ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # if use connection pool # default value is false # since V4.05 use_connection_pool = false # connections whose the idle time exceeds this time will be closed # unit: second # default value is 3600 # since V4.05 connection_pool_max_idle_time = 3600 # if load FastDFS parameters from tracker server # since V4.05 # default value is false load_fdfs_parameters_from_tracker=false # if use storage ID instead of IP address # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # default value is false # since V4.05 use_storage_id = false # specify storage ids filename, can use relative or absolute path # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # since V4.05 storage_ids_filename = storage_ids.conf #HTTP settings http.tracker_server_port=80 #use "#include" directive to include HTTP other settiongs ##include http.conf
4:測試類(參考檔案上傳步驟理解)
public class Test { public static void main(String[] args) throws FileNotFoundException, IOException, Exception { //1. 載入配置檔案 ClientGlobal.init("C:\\study\\java\\fastDFSdemo\\src\\main\\resources\\fdfs_client.conf"); //2. 構建一個管理者客戶端 TrackerClient client = new TrackerClient(); //3. 連線管理者服務端 TrackerServer trackerServer = client.getConnection(); //4. 宣告儲存服務端 StorageServer storageServer = null; //5. 獲取儲存伺服器的客戶端物件 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //6. 上傳檔案(檔案位置,副檔名,檔案詳細資訊) String[] strings = storageClient.upload_file("C:\\study\\文字.jpg", "jpg", null); //7. 顯示上傳結果 file_id for (String str : strings) { System.out.println(str); } } }
5:結果(組名和圖片路徑)

6:在瀏覽器中測試

Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-03/157466.htm