一、分布式文件系統FastDFS原理及入門


1、簡介:FastDFS是用C語言編寫的一款開源的分布式文件系統,FastDSF充分考慮了冗余備份、負載均衡、線性擴容等機制,並注重高可用、高性能等特點,使用FastDFS可以很容易的搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。

2、原理:FastDFS系統結構如下圖所示:

 

FastDFS分為Tracker、Storage,其中Storage負責存儲文件,Tracker負責存儲文件所在地址,主要作用是負載均衡和資源調度。

Tracker、Storage都可以實現集群部署,Tracker的每個節點地位平等,而Storage可以分為多個組,每個組之間保存的文件是不同的,組內部分為多個成員,每個成員保存的內容是一樣,組成員地位一致,沒有主從概念。

使用FastDFS存儲文件優點:可以應對互聯網的海量文件存儲,一旦文件較多,可以隨時橫向擴展,且集群的實現也使系統不存在單點故障問題,用戶不會因為服務器宕機而無法訪問文件資源。

3.工作流程

文件上傳:Client會先向Tracker詢問存儲地址,Tracker查詢到存儲地址后返回給Client,Client拿着地址直接和對應的Storage通訊,將文件上傳至改Storage。

 

文件下載:同樣,Client會向Tracker詢問地址,並帶上要查詢的文件名和組名,Tracker查詢后會將地址返回給Client,Client拿着地址和指定Storage通訊並下載文件。

 

4.安裝部署

FastDFS安裝過程很復雜,需要配置許多參數,我會另外寫一篇專門配置FastDFS的文檔。

5.測試Demo

1.創建Maven工程fastdfsdemo

安裝Jar包到Maven本地倉庫,使用如下命令:

mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs  -Dversion=1.2 -Dpackaging=jar -Dfile=d:\setup\fastdfs_client_v1.20.jar

在pom.xml中引入:

<dependency>

    <groupId>org.csource.fastdfs</groupId>

    <artifactId>fastdfs</artifactId>

    <version>1.2</version>

</dependency>

添加配置文件:fdfs_client.conf,修改服務器地址:

# 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.1.106:22122

創建Java測試類:

 1      // 1、加載配置文件,配置文件中的內容就是 tracker 服務的地址。
 2         ClientGlobal.init("D:/maven/fastdfsdemo/src/fdfs_client.conf");
 3         // 2、創建一個 TrackerClient 對象。
 4         TrackerClient trackerClient = new TrackerClient();
 5         // 3、使用 TrackerClient 對象創建連接,獲得一個 TrackerServer 對象。
 6         TrackerServer trackerServer = trackerClient.getConnection();
 7         // 4、創建一個 StorageServer 的引用,值為 null
 8         StorageServer storageServer = null;
 9         // 5、創建一個 StorageClient 對象,需要兩個參數 TrackerServer 對象、StorageServer 的引用
10         StorageClient storageClient = new StorageClient(trackerServer, storageServer);
11         // 6、使用 StorageClient 對象上傳圖片。
12         //擴展名不帶"."
13         String[] strings = storageClient.upload_file("D:/pic/demo1.jpg", "jpg",null);14         // 7、返回數組。包含組名和圖片的路徑。
15         for (String string : strings) {
16             System.out.println(string);
17         }

 


免責聲明!

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



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