Linux|Linux新手入门系列:FastDFS概念和原理( 二 )


Storage server(后简称storage)以组(卷 , group或volume)为单位组织 , 一个group内包含多台storage机器 , 数据互为备份 , 存储空间以group内容量最小的storage为准 , 所以建议group内的多个storage尽量配置相同 , 以免造成存储空间的浪费 。
以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内Storage server数量即为该group的副本数) , 比如将不同应用数据存到不同的group就能隔离应用数据 , 同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制 , 同时当group内有机器坏掉时 , 数据恢复只能依赖group内的其他机器 , 使得恢复时间会很长 。
group内每个storage的存储依赖于本地文件系统 , storage可配置多个数据存储目录 , 比如有10块磁盘 , 分别挂载在/data/disk1-/data/disk10 , 则可将这10个目录都配置为storage的数据存储目录 。
storage接受到写文件请求时 , 会根据配置好的规则(后面会介绍) , 选择其中一个存储目录来存储文件 。 为了避免单个目录下的文件数太多 , 在storage第一次启动时 , 会在每个数据存储目录里创建2级子目录 , 每级256个 , 总共65536个文件 , 新写的文件会以hash的方式被路由到其中某个子目录下 , 然后将文件数据直接作为一个本地文件存储到该目录中 。
group:组 ,也可称为卷 。同组内服务器上的文件是完全相同的, 同一组内的Storage server之间是对等的 , 文件上传、删除等操作可以在任意一台Storage server上进行 。
(3)客户端(Client)client:客户端 , 作为业务请求的发起方 , 通过专有接口 , 使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互 。 FastDFS向使用者提供基本文件访问接口 , 比如upload、download、append、delete等 , 以客户端库的方式提供给用户使用 。
(4)上传流程
(5)下载流程
(6)总结总的来说 , Tracker相当于FastDFS的大脑 , 不论是上传还是下载都是通过Tracker来分配资源;客户端一般可以使用ngnix等静态服务器来调用或者做一部分的缓存;Storage内部分为group卷(或者叫做组) , 卷与卷之间是平行的关系 , 可以根据资源的使用情况随时增加 , 卷内服务器文件相互同步备份 , 以达到容灾的目的 。
4.FastDFS的FIDFastDFS的FID是客户端上传文件后存储服务器返回给客户端 , 用于以后访问该文件的索引信息 。 文件索引信息包括:组名(卷名) , 虚拟磁盘路径 , 数据两级目录 , 文件名 。
FID格式:组名/虚拟磁盘路径/数据两级目录/文件名
如:group1/M00/01/44/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg
group1(组名)/M00(虚拟磁盘路径)/01/44(数据两级目录)/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg(文件名)

(1)组名:文件上传后所在的storage组名称 , 在文件上传成功后有storage服务器返回 , 需要客户端自行保存 。
(2)虚拟磁盘路径:storage配置的虚拟路径 , 与磁盘选项store_path*对应 。 如果配置了store_path0则是M00 , 如果配置了store_path1则是M01 , 以此类推 。
(3)数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录 , 用于存储数据文件 。
(4)文件名:与文件上传时不同 。 是由存储服务器根据特定信息生成 , 文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息 。




【Linux|Linux新手入门系列:FastDFS概念和原理】IT小胖豆:初学者踩坑之路及过程分享 , 希望能够帮到一些初学者 , 欢迎各位IT打工人 , 入坑讨论-_-