分布式 文件系统(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官方文档

 

posted @ 2020-05-19 22:38  如幻行云  阅读(2218)  评论(0编辑  收藏  举报