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 }