分佈式文件服務器FastDFS的使用

分佈式項目中涉及到的文件上傳與下載,此時使用以前的上傳方式,將上傳的文件與當前項目所在服務器放在同一個位置,顯然不符合分佈式項目的理念,此時咱們藉助FastDFS將上傳的文件數據存儲到單純的一個服務器中。數組

1、先介紹下什麼是FastDFS

  FastDFS 是用 c 語言編寫的一款開源的分佈式文件系統。包括 Tracker server 和 Storage server,FastDFS 爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用 FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。服務器

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

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

優勢:分佈式

  創建各類集羣,防止高併發,適應分佈式的存儲要求高併發

  存儲端理論上能夠無限擴容post

  存儲端不會丟失數據,容災性強。性能

缺點:this

  維護成本高,須要花費更多的金錢去多開服務器spa

2、上傳流程

 

  客戶端上傳文件後存儲服務器將文件ID 返回給客戶端,此文件 ID 用於之後訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。

  

 

 

  

組名:文件上傳後所在的 storage 組名稱,在文件上傳成功後由 storage 服務器返回,須要客戶端自行保存。

虛擬磁盤路徑:storage 配置的虛擬路徑,與磁盤選項 store_path*對應。若是配置了store_path0 則是 M00,若是配置了 store_path1 則是 M01,以此類推。

數據兩級目錄:storage 服務器在每一個虛擬磁盤路徑下建立的兩級目錄,用於存儲數據文件。

文件名:與文件上傳時不一樣。是由存儲服務器根據特定信息生成,文件名包含:源存儲服務器 IP 地址、文件建立時間戳、文件大小、隨機數和文件拓展名等信息。

2.1  FastDFS的一個小demo

複製代碼
public class demo1 {
    public static void main(String[] args) throws IOException, MyException {
        // 一、加載配置文件,配置文件中的內容就是 tracker 服務的地址。
        ClientGlobal.init("fdfs_client.conf");
        // 二、建立一個 TrackerClient 對象。直接 new 一個。
        TrackerClient trackerClient = new TrackerClient();
        // 三、使用 TrackerClient 對象建立鏈接,得到一個 TrackerServer 對象
        TrackerServer trackerServer = trackerClient.getConnection();
        // 四、建立一個 StorageServer 的引用,值爲 null
        StorageServer storageServer = null;
        // 五、建立一個 StorageClient 對象,須要兩個參數 TrackerServer 對象、StorageServer 的引用
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 六、使用 StorageClient 對象上傳圖片,參數1爲文件,參數2爲文件後綴名。
        //擴展名不帶「.」
        String[] strings = storageClient.upload_file("C:\\Users\\Administrator\\Desktop\\2.jpg", "jpg",null);
        // 七、返回數組。包含組名和圖片的路徑。
        for (String string : strings) {
            System.out.println(string);
        }
    }
}
複製代碼

打印的String:group1/M00/00/01/wKjIgF3SRXWAHitEAAB1q5bIEwY138.jpg

所須要的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
# 分佈式文件服務器的ip,須要使用更改此處便可
tracker_server=192.168.200.128: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
複製代碼

3、頁面展現效果

 

 

此時說明咱們上傳的照片已經上傳到分佈式文件服務器上,且可以訪問到咱們上傳的照片

 

 

 注:

   分佈式文件服務器自行配置,步驟過於麻煩。

相關文章
相關標籤/搜索