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