FastDFS分佈式文件系統

分佈式文件系統nginx


 

實現圖片上傳功能,須要圖片服務器json

 

圖片服務器 

若是要實現圖片上傳功能,須要一臺圖片服務器(能夠不要,可是由於圖片上傳只能到指定的服務器上,若是不搭建另一臺服務器用於接收圖片,則只能上傳到正在運行的應用服務器,這樣的話,應用服務器的壓力將會無限加大)數組

圖片服務器特色

一、存儲空間可擴展服務器

二、提供統一的訪問方式架構

三、訪問效率高負載均衡

企業中的圖片服務器

一、使用fastDFS分佈式文件系統分佈式

二、使用nginx反向代理服務器性能

 

FastDFS

FastDFS(Fast Distributed file system),使用了C語言編寫的一款開源的分佈式文件系統。FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、橫向擴展等機制,並注重高可用、高性能等指標,使用FastDFS能夠很容易搭建一套高性能的文件服務器集羣,提供文件上傳、下載等服務this

FastDFS架構

FastDFS架構包括Tracker server和Storage server。由客戶端請求Tracker server文件的上傳或下載,Tracker server調度Storage server完成文件上傳下載。spa

Tracker server

負載均衡和調度,經過Tracker server調度,經過Tracker server在文件上傳時能夠根據一些策略找到storage server提供文件上傳服務,能夠將tracker稱爲追蹤服務器或調度服務器。

Storage server

文件存儲,客戶端上傳的文件最終存儲在storage server,storage server沒有實現本身的文件系統而是利用操做系統的文件系統來管理文件,能夠將storage稱爲存儲服務器

總結

Tracker server管理集羣,收集信息,處理信息,爲了保證高可用,能夠搭建集羣

Storage server保存文件,分爲多組,組合組之間的數據不同,組內成員數據一致,保證數據高可用,能夠增長組,達到擴容效果

文件上傳流程


其中,file_id指文件索引信息,內包含:組名、虛擬磁盤路徑、數據兩級目錄、文件名,以下圖:

  • 組名:文件上傳後所在的storage組名,在文件上傳成功後有storage服務器返回,須要客戶端自行保存
  • 虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應,若是配置了store_path0則是M00,若是配置了store_path1則是M01,以此類推
  • 數據兩級目錄:storage服務器在每一個虛擬磁盤路徑下建立的兩級目錄,用於存儲數據文件,兩級目錄的範圍都是00~FF
  • 文件名:與文件上傳時不一樣,是由存儲服務器根據特定信息生成,文件名包含:原存儲服務器IP、文件建立時間戳、文件大小、隨機數和文件拓展名等信息

文件下載流程

 

 

Java操做FastDFS

引入依賴

 
<!--fastdfs-client-->
<dependency>
    <groupId>org.csource</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.25-RELEASE</version>
</dependency>

 

配置fafstdfc_client.conf

tracker_server=192.168.96.253:22122

 

Java步驟

//加載配置文件
Stringconf_filename=this.class().getResource("/fastdfs_client.conf").getPath();
//初始化客戶端全局對象
ClientGlobal.init(conf_filename);
//建立存儲客戶端對象
StorageClientstorageClient=newStorageClient();
//上傳文件
String[]arr=storageClient.upload_file("即將上傳的文件路徑",null);
/**
*訪問路徑:http://192.168.12.131/group1/M00/00/00/wKgMg1o53fOAL1CRAABonuLw4M4127.jpg
*[group1,M00/00/00/wKgMgFlIkk2AHfnLAABonuLw4M4075.jpg]
*數組中的第一個元素:組的名稱
*數組中的第二個元素:遠程文件名稱
*/

返回的數組中

    第一個元素:組名

    第二個名字:遠程名

 

下載

//加載配置文件
Stringconf_filename=this.getClass().getResource("/fastdfs_clien.conf").getPath();
//初始化客戶端全局的對象
ClientGlobal.init(conf_filename);
//建立存儲客戶端對象
StorageClientstorageClient=newStorageClient();
//下載文件
byte[]data=storageClient.download_file("組名","遠程文件名");
FileOutputStreamfos=newFileOutputStream(newFile("文件下載存儲路徑"));
fos.write(data);
fos.flush();
fos.close();

 

刪除服務器上圖片

//加載配置文件
Stringconf_filename=this.getClass().getResource("/fastdfs_client.conf").getPath();
//初始化客戶端全局對象
ClientGlobal.init(conf_filename);
//建立存儲客戶端對象
storageClientstorageClient=newStorageClient();
//刪除文件
intres=storageClient.delete_file("組名","遠程文件名");
/*
*若是返回0,則表明成功刪除
*/
相關文章
相關標籤/搜索