您好,登錄后才能下訂單哦!
本篇內容介紹了“FastDFS的原理和使用方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
文件系統是負責管理和存儲文件的系統軟件,它是操作系統和硬件驅動之間的橋梁,操作系統通過文件系統提供的接口去存取文件,用戶通過操作系統訪問磁盤上的文件。
分布式文件系統是面對互聯網的需求而產生,互聯網時代對海量數據如何存儲?靠簡單的增加硬盤的個數已經無法滿足我們的要求,因為硬盤傳輸速度有限但是數據在急劇增長,另外我們還要做好數據備份、數據安全等。
采用分布式文件系統可以將多個地點的文件系統通過網絡連接起來,組成一個文件系統網格,結點之間通過網絡進行通信,一臺文件系統的存儲和傳輸能力有限,我們讓文件在多臺計算機上存儲,通過多臺計算共同傳輸。
好處:
1、一臺計算機的文件系統處理能力擴充到多臺計算機同時處理
2、一臺計算機掛了還要另外副本計算機提供給數據
3、每臺計算機可以放在不同的地域,這樣用戶就可以就近訪問,提供訪問速度
主流的分布式文件系統:NFS,GFS,HDFS,
分布式文件服務提供商:阿里OSS,七牛云,百度云
FastDFS是用C語言編寫的一款開源的分布式文件系統。FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用,高性能等指標,使用FastDFS很容易搭建一套高性能等文件服務器集群提供文件上傳、下載等服務。與上述主流的分布式文件系統相比,,FastDFS雖然開發體驗差,但是系統復雜性低并且性能高,非常適合存儲圖片等那些小文件,FastDFS不對文件進行分塊,所以它就沒有分塊合并對開銷, 網絡通信采用socket,通信速度很快。
FastDFS架構
FastDFS架構包括Tracker server和Storage server。客戶端請求Tracker server進行文件上傳、下載,通過Tracker server調度最終由Storage server完成文件上傳和下載。
Tracker server作用是負載均衡和調度,通過Tracker server在文件上傳時可用根據一些策略找到Storage server提供文件上傳服務。可以將tracker稱為追蹤服務器或調度服務器。
Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務器上,Storage server沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將Storage稱為存儲服務器。
Tracker集群
FastDFS集群中的Tracker server可以,Tracker server之間是相互平等關系同時提供服務,Tracker server不存在單點故障。客戶端請求Tracker server
采用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker。
Storage集群
Storage集群采用分組存儲方式,storage集群由一個或多個組構成,集群存儲總容量為集群中所有組的存儲容量只和。一個組由一臺或多臺存儲服務器組成,組內的Storage server之間的平等關系,不同組的Storage server之間不會相互通信,同組內的Storage server之間會相互連接進行文件同步,從而保證同組內每個Storage上的文件完全一致。一個組的存儲容量為該組內存儲服務器容量最小的那個,由此可見組內存儲服務器的軟硬件配置最好是一致的。
采用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由Tracker進行調度選擇。一個分組的存儲服務器訪問壓力較大時,可以在該組增加存儲服務器來擴充服務能力。當系統容量不足時,可以增加組來擴充存儲容量。
Storage server會連接集群中所有的Tracker server,定時向他們報告自己的狀態,包括磁盤剩余空間、文件同步狀態、文件上傳下載次數等統計信息。
文件上傳流程:
1、Client發送上傳連接請求,給Tracker server
2、Tracker server查詢可用storage,并將查詢到的信息(Storage的ip和端口)返回給Client
3、Client上傳文件到Storage server
4、Storage server生成文件ID,并且存儲文件,將文件ID返回給Client
5、Client存儲文件ID
注意:文件ID包含組名,虛擬磁盤路徑,數據兩級目錄,文件名
文件下載流程
1、Client發送下載鏈接請求,給Tracker server
2、Tracker server查詢可用Storage,并將查詢到的信息(Storage的ip和端口)返回給Client
3、Client發送文件ID,給Storage server
4、Storage server根據文件ID查找文件,并且返回文件內容給Client
入門代碼:
一、導入依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>lianbang.wu</groupId> <artifactId>FastDFSDemo</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> </dependencies> </project>
二、配置文件,在類路徑下創建fastdfs-client. properties
fastdfs.connect_timeout_in_seconds = 5 fastdfs.network_timeout_in_seconds = 30 fastdfs.charset = UTF-8 fastdfs.tracker_servers = 192.168.0.0:22222
三、測試代碼
package lianbang.wu.fastDFS; import org.csource.common.MyException; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @SpringBootTest @RunWith(SpringRunner.class) public class FastdfsTest { /** * 文件上傳 */ @Test public void testUpload(){ try{ //加載全局配置 ClientGlobal.initByProperties("config/fastdfs_client.properties"); //創建客戶端 TrackerClient trackerClient = new TrackerClient(); //連接tracker server TrackerServer trackerServer = trackerClient.getConnection(); if (trackerServer == null){ return; } //獲取一個storage server StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer); StorageClient storageClient = new StorageClient(trackerServer, storeStorage); NameValuePair [] list = null; String[] fileId = storageClient.upload_file("C:\\user\\admin\\1.png", "png",list ); System.out.println(fileId); }catch (Exception e){ e.printStackTrace(); } } /** * 文件查詢 */ @Test public void testQueryFile() throws IOException, MyException { //加載全局配置 ClientGlobal.initByProperties("config/fastdfs_client.properties"); TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer); StorageClient storageClient = new StorageClient(trackerServer, storeStorage); FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/01/w.png"); System.out.println(fileInfo); } /** * 文件下載 */ @Test public void testDownloadFile() throws IOException, MyException { //加載全局配置 ClientGlobal.initByProperties("config/fastdfs_client.properties"); TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); StorageClient storageClient = new StorageClient(trackerServer, storageServer); byte[] bytes = storageClient.download_file("group1", "M00/00/01/w.png"); FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/1.png")); fileOutputStream.write(bytes); fileOutputStream.close(); } }
“FastDFS的原理和使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。