分布式 文件系統(FastDFS/MinIO)


一、FastDFS

  簡介:FastDFS是一個開源的高性能輕量級分布式文件系統,使用C語言編寫的,含文件上傳、同步、訪問、下載及大容量存儲和負載均衡等功能,解決了海量文件數據存儲的問題,適合存儲大小為4KB~500MB的文件。

  1、核心概念

    A. 跟蹤服務器(Tracker Server):主要負責調度,起到均衡作用,負責管理器所有的Storage Server和group,每個storage在啟動后會連接Tracker,告知自己所屬group等信息,並保持周期性心跳;

    B. 存儲服務器(Storage Server):主要提供容量和備份服務,以group為單位,每個group中可以有多台Storage Server,數據互為備份,存儲空間以group容量最小的為准;

    C. 客戶端(Client):上傳下載文件的服務器,業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤服務器或存儲節點進行數據交互。

 

  2、文件上傳

    A. client詢問tracker分配哪個storage存儲,tracker返回一台可用的storage;

    B. client直接和storage通訊完成文件上傳;

    C. storage保存文件以后給client返回組名和文件名。

  3、文件下載

    A. client詢問tracker下載文件的storage,參數為文件標識;

    B. tracker返回一台可用的storage;

    C. client直接和storage通訊完成文件下載;

    注意:可以結合nginx來完成下載

 

  4、通訊協議:客戶端與服務端通訊時采用的是自定義的通訊協議,協議包由header和body組成。

  5、常見錯誤

    A. 錯誤一:上傳文件時報錯誤碼28,磁盤空間不足

     異常如下:

com.github.tobato.fastdfs.exception.FdfsServerException: 錯誤碼:28,錯誤信息:沒有足夠的存儲空間
    at com.github.tobato.fastdfs.exception.FdfsServerException.byCode(FdfsServerException.java:54)
    at com.github.tobato.fastdfs.proto.ProtoHead.validateResponseHead(ProtoHead.java:119)
    at com.github.tobato.fastdfs.proto.AbstractFdfsCommand.receive(AbstractFdfsCommand.java:101)
    at com.github.tobato.fastdfs.proto.AbstractFdfsCommand.execute(AbstractFdfsCommand.java:45)
    at com.github.tobato.fastdfs.conn.ConnectionManager.execute(ConnectionManager.java:76)
    at com.github.tobato.fastdfs.conn.TrackerConnectionManager.executeFdfsTrackerCmd(TrackerConnectionManager.java:73)
    at com.github.tobato.fastdfs.service.DefaultTrackerClient.getStoreStorage(DefaultTrackerClient.java:55)
    at com.github.tobato.fastdfs.service.DefaultGenerateStorageClient.uploadFile(DefaultGenerateStorageClient.java:54)
    -------...
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)

     解決辦法:修改tracker.conf中reserved_storage_space參數,預留磁盤空間,也就是磁盤可用容量不能低於這個值

  可參考:FastDFS官網

                 FastDFS分布式文件系統文檔

      FastDFS常見問題

 

二、MinIO

  簡介:MinIO是Apache下開源的一個非常輕量級的對象存儲服務,非常適合存儲大容量非結構化的數據,比如圖片、文件和視頻等,其大小可以是0B~5TB之間。支持JavaScript、Java等多種語言,支持分布式存儲,具有高擴展性和高可用性,相比FastDFS部署更簡單且支持多實例。

  可參考:MinIO官方文檔

 


免責聲明!

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



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