您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“FastDFS的原理和使用方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
文件系統(tǒng)是負責管理和存儲文件的系統(tǒng)軟件,它是操作系統(tǒng)和硬件驅(qū)動之間的橋梁,操作系統(tǒng)通過文件系統(tǒng)提供的接口去存取文件,用戶通過操作系統(tǒng)訪問磁盤上的文件。
分布式文件系統(tǒng)是面對互聯(lián)網(wǎng)的需求而產(chǎn)生,互聯(lián)網(wǎng)時代對海量數(shù)據(jù)如何存儲?靠簡單的增加硬盤的個數(shù)已經(jīng)無法滿足我們的要求,因為硬盤傳輸速度有限但是數(shù)據(jù)在急劇增長,另外我們還要做好數(shù)據(jù)備份、數(shù)據(jù)安全等。
采用分布式文件系統(tǒng)可以將多個地點的文件系統(tǒng)通過網(wǎng)絡(luò)連接起來,組成一個文件系統(tǒng)網(wǎng)格,結(jié)點之間通過網(wǎng)絡(luò)進行通信,一臺文件系統(tǒng)的存儲和傳輸能力有限,我們讓文件在多臺計算機上存儲,通過多臺計算共同傳輸。
好處:
1、一臺計算機的文件系統(tǒng)處理能力擴充到多臺計算機同時處理
2、一臺計算機掛了還要另外副本計算機提供給數(shù)據(jù)
3、每臺計算機可以放在不同的地域,這樣用戶就可以就近訪問,提供訪問速度
主流的分布式文件系統(tǒng):NFS,GFS,HDFS,
分布式文件服務(wù)提供商:阿里OSS,七牛云,百度云
FastDFS是用C語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用,高性能等指標,使用FastDFS很容易搭建一套高性能等文件服務(wù)器集群提供文件上傳、下載等服務(wù)。與上述主流的分布式文件系統(tǒng)相比,,F(xiàn)astDFS雖然開發(fā)體驗差,但是系統(tǒng)復(fù)雜性低并且性能高,非常適合存儲圖片等那些小文件,F(xiàn)astDFS不對文件進行分塊,所以它就沒有分塊合并對開銷, 網(wǎng)絡(luò)通信采用socket,通信速度很快。
FastDFS架構(gòu)
FastDFS架構(gòu)包括Tracker server和Storage server??蛻舳苏埱骉racker server進行文件上傳、下載,通過Tracker server調(diào)度最終由Storage server完成文件上傳和下載。
Tracker server作用是負載均衡和調(diào)度,通過Tracker server在文件上傳時可用根據(jù)一些策略找到Storage server提供文件上傳服務(wù)??梢詫racker稱為追蹤服務(wù)器或調(diào)度服務(wù)器。
Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務(wù)器上,Storage server沒有實現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng)的文件系統(tǒng)來管理文件??梢詫torage稱為存儲服務(wù)器。
Tracker集群
FastDFS集群中的Tracker server可以,Tracker server之間是相互平等關(guān)系同時提供服務(wù),Tracker server不存在單點故障??蛻舳苏埱骉racker server
采用輪詢方式,如果請求的tracker無法提供服務(wù)則換另一個tracker。
Storage集群
Storage集群采用分組存儲方式,storage集群由一個或多個組構(gòu)成,集群存儲總?cè)萘繛榧褐兴薪M的存儲容量只和。一個組由一臺或多臺存儲服務(wù)器組成,組內(nèi)的Storage server之間的平等關(guān)系,不同組的Storage server之間不會相互通信,同組內(nèi)的Storage server之間會相互連接進行文件同步,從而保證同組內(nèi)每個Storage上的文件完全一致。一個組的存儲容量為該組內(nèi)存儲服務(wù)器容量最小的那個,由此可見組內(nèi)存儲服務(wù)器的軟硬件配置最好是一致的。
采用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由Tracker進行調(diào)度選擇。一個分組的存儲服務(wù)器訪問壓力較大時,可以在該組增加存儲服務(wù)器來擴充服務(wù)能力。當系統(tǒng)容量不足時,可以增加組來擴充存儲容量。
Storage server會連接集群中所有的Tracker server,定時向他們報告自己的狀態(tài),包括磁盤剩余空間、文件同步狀態(tài)、文件上傳下載次數(shù)等統(tǒng)計信息。
文件上傳流程:
1、Client發(fā)送上傳連接請求,給Tracker server
2、Tracker server查詢可用storage,并將查詢到的信息(Storage的ip和端口)返回給Client
3、Client上傳文件到Storage server
4、Storage server生成文件ID,并且存儲文件,將文件ID返回給Client
5、Client存儲文件ID
注意:文件ID包含組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名
文件下載流程
1、Client發(fā)送下載鏈接請求,給Tracker server
2、Tracker server查詢可用Storage,并將查詢到的信息(Storage的ip和端口)返回給Client
3、Client發(fā)送文件ID,給Storage server
4、Storage server根據(jù)文件ID查找文件,并且返回文件內(nèi)容給Client
入門代碼:
一、導(dǎo)入依賴
<?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>
二、配置文件,在類路徑下創(chuàng)建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"); //創(chuàng)建客戶端 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的原理和使用方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。