91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FastDFS的原理和使用方法

發布時間:2021-06-29 09:59:45 來源:億速云 閱讀:257 作者:chen 欄目:大數據

本篇內容介紹了“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的原理和使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

来安县| 盈江县| 乐业县| 彩票| 丰都县| 封丘县| 汾西县| 南华县| 舒兰市| 张家界市| 卓尼县| 涡阳县| 大关县| 阳城县| 云霄县| 汤阴县| 黔西县| 合作市| 天峻县| 贡觉县| 沙雅县| 吴忠市| 乐业县| 合山市| 溧水县| 来安县| 拉孜县| 高安市| 灵璧县| 祥云县| 海林市| 合作市| 南京市| 马关县| 密山市| 郴州市| 杭锦旗| 阳春市| 和政县| 山阴县| 修水县|