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


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

一、先介紹下什么是FastDFS

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

  Tracker server 作用是負載均衡和調度通過 Tracker server 在文件上傳時可以根據一些策略找到 Storage server 提供文件上傳服務。可以將 tracker 稱為追蹤服務器或調度服務器。

  Storage server 作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務器上,Storageserver 沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage稱為存儲服務器。

優點:

  建立各種集群,防止高並發,適應分布式的存儲要求

  存儲端理論上可以無限擴容

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

缺點:

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

二、上傳流程

 

  客戶端上傳文件后存儲服務器將文件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 {
        // 1、加載配置文件,配置文件中的內容就是 tracker 服務的地址。
        ClientGlobal.init("fdfs_client.conf");
        // 2、創建一個 TrackerClient 對象。直接 new 一個。
        TrackerClient trackerClient = new TrackerClient();
        // 3、使用 TrackerClient 對象創建連接,獲得一個 TrackerServer 對象
        TrackerServer trackerServer = trackerClient.getConnection();
        // 4、創建一個 StorageServer 的引用,值為 null
        StorageServer storageServer = null;
        // 5、創建一個 StorageClient 對象,需要兩個參數 TrackerServer 對象、StorageServer 的引用
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 6、使用 StorageClient 對象上傳圖片,參數1為文件,參數2為文件后綴名。
        //擴展名不帶“.”
        String[] strings = storageClient.upload_file("C:\\Users\\Administrator\\Desktop\\2.jpg", "jpg",null);
        // 7、返回數組。包含組名和圖片的路徑。
        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

三、頁面展示效果

 

 

此時說明我們上傳的照片已經上傳到分布式文件服務器上,且能夠訪問到我們上傳的照片

 

 

 注:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM