FastDFS


FastDFS

視頻存儲

  • 阿里雲OSS(視頻簡單,貴!!!)

  • 自建存儲系統

對於小視頻的功能的開發,核心點就是:存儲 + 推薦 + 加載速度 。

  • 對於存儲而言,小視頻的存儲量以及容量都是非常巨大的

    • 所以我們選擇自己搭建分布式存儲系統 FastDFS進行存儲

  • 對於推薦算法,我們將采用多種權重的計算方式進行計算

  • 對於加載速度,除了提升服務器帶寬外可以通過CDN的方式進行加速,當然了這需要額外購買CDN服務

3.1. FastDFS是什么?

FastDFS是分布式文件系統。使用 FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳. 下載等服務。

3.2. 工作原理

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 節點地位平等。收集 Storage 集群的狀態。

Storage 分為多個組,每個組之間保存的文件是不同的。每個組內部可以有多個成員,組成員內部保存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。

 

3.2.1. 文件的上傳

 

 客戶端上傳文件后存儲服務器將文件 ID 返回給客戶端,此文件 ID 用於以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。

3.2.2. 文件的下載

 

 客戶端下載請求到Tracker服務,Tracker返回給客戶端storage的信息,客戶端根據這些信息進行請求storage獲取到文件。

3.3. FastDFS環境搭建

​ 企業中搭建FastDFS是一個比較繁瑣和復雜的過程(多個服務器之間的配合和配置等,專業的人員搭建),但是在學習階段。由於所有的組件全部配置到linux虛擬機,已docker運行。所以linux的內存有要求(運行的過程中,可能會出現fastdfs的容器,啟動之后自動關閉,表示虛擬機內存不足,適當的擴大內存),學習環境中使用一台調度服務器,一台存儲服務器

3.3.1. 搭建服務

我們使用docker進行搭建。目前所有的組件全部以docker的形式配置

#啟動
docker-compose up -d
#查看容器
docker ps -a
#FastDFS占用虛擬機資源較多,如果啟動時發現Tracker或者Storage沒有正常啟動,
#使用如下命令 重啟即可
#docker-compose restart

3.3.2. 入門案例

<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.26.7</version>
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
    </exclusions>
</dependency>

application.yml

找到application.yml,添加FastDFS的配置

 

# 分布式文件系統FDFS配置
fdfs:
  so-timeout: 1500
  connect-timeout: 600
  #縮略圖生成參數
  thumb-image:
    width: 150
    height: 150
  #TrackerList參數,支持多個
  tracker-list: 1p地址           #track服務器地址
  web-server-url: IP地址  #storage中nginx地址(反向代理)

測試

  • 編寫測試類,測試文件上傳到FastDFS

import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.tanhua.server.TanhuaServerApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TanhuaServerApplication.class)
public class TestFastDFS {

    //從調度服務器獲取,一個目標存儲服務器,上傳
    @Autowired
    private FastFileStorageClient client;

    @Autowired
    private FdfsWebServer webServer;// 獲取存儲服務器的請求URL

    @Test
    public void testFileUpdate() throws FileNotFoundException {
         //1. 指定文件
        File file = new File("D:\\1.jpg");
        //2. 文件上傳
        StorePath path = client.uploadFile(new FileInputStream(file),
                file.length(), "jpg", null);
        //3. 拼接訪問路徑
        String url = webServer.getWebServerUrl() + path.getFullPath();
    }
}

 


免責聲明!

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



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