1、分布式文件系统
为了应对海量数据的存储和处理,分布式文件系统应运而生。
那什么是分布式文件系统?分布式文件系统将数据在物理上分布到多个存储节点上存储,并对这些存储节点进行同一管理和分配,向用户提供文件系统访问接口。
分布式文件系统具有的特性
高扩展性:可简单快速添加数据节点进行扩容操作
冗余性:同一数据在多个节点上拥有多个副本,保证某一节点宕机数据不会丢失
数据复制:文件系统可自行完成数据副本的创建
空间平衡:保持多个存储节点的存储空间使用率均衡
高IO能力:由于数据分散在多个节点存储,并行操作IO能力强于单机系统
廉价性
2、MogileFS介绍
MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器)。MogileFS非常适用于存储海量小文件,比如图片,小段视频。
2.1 MogileFS角色介绍
Application:
存储和下载的客户端
Tracker:
运行的进程为mogilefsd。基于事件模型的父进程负责管理所有来自客户端的请求,均衡请求发送到各个查询线程,处理子进程间的所有通信。mogilefsd下的子进程包含:
Replication :自动复制数据副本
Deletion:删除线程
Query:应答客户端请求
Reaper:某节点失败后,自动补充丢失的数据副本到其他节点上
Monitor:监控节点和存储设备的健康和状态
Database:
MogileFS的元数据存储在数据库中,元数据包含命名空间和文件存储位置信息
Storage Nodes:
运行进程为mogstored,依赖于Perbal。存储数据的节点。Tracker与Storage Nodes 通信采用http协议。
2.2 MogileFS 基本概念
domain:
上传的每一个文件对应一个fid,等同于key的概念。MogileFS允许定义多个域来存放数据,每个域中的key值必须唯一,不同的域中的key可以相同。
class:
class是每个域中最小数据副本复制的最小单元,也即数据副本是按class进行整体复制。同时也定义了文件属性,如数据副本的数量等等。
2、FastDFS
FastDFS是国人使用c++研发的一款轻量级分布式文件系统,同样适合存储海量小文件。
2.1 FastDFS角色介绍
Tracker:
Tracker在客户端与存储节点之间扮演协调者角色,它负责管理所有storage node 和group,在多个group间负载均衡数据存储以及接受客户端的数据请求。每个storage启动之后向tracker汇报自己所属group及健康信息,由此,在内存中tracker维护这些很少的元数据,即group与storage的映射关系。
这使得tracker的扩展十分容易,所有的tracker都会接收来自storage的报告信息,生成元数据之后提供读写服务。
Storage:
存储数据的节点,保存文件的元数据信息,完成客户端的数据请求。storage是以group为单位组织起来的,一个group包含至少一个storage,group内的storage互为备份存储相同的数据,做到冗余功能。每个storage下允许挂载多个目录,数据存储在本地文件系统上。
client:
数据请求者,以特定协议与tracker和storage通信,并保存上传文件后storage返回的key。
2.2 一个上传流程
前提是storage不断向tracker汇报状态信息,当客户端向tracker提交上传请求,tracker根据调度规则挑选一个group,并把group中一个storage的地址信息返回给客户端,客户端继而将文件上传至该storage中,storage根据规则选择一个目录存储数据,storage存储成功后返回一个文件存储路径信息。路径信息由多个字段拼接而成。其中fileid包含了丰富信息,上传的源storageIP地址,文件创建时间戳,文件大小,文件后缀,再加上文件crc32和一个随机数,然后进行base64编码而成。具体返回的路径信息如下:
需要注意的是,文件在一个storage存储完成之后便认为上传成功,之后源storage向group内其他storage提供文件元数据信息,其他节点自行复制数据。假如在同步的过程中,源storage失败,则本次上传的数据将丢失,如果想要避免这种风险,需要在客户端写好双重写代码。
2.3 一个下载流程
客户端向tracker发送路径地址提交下载请求,tracker解析路径地址得到group信息,源storageIP,时间戳等信息后,根据规则挑选一个最佳storage地址信息返回给客户端,客户端再发送请求到指定storage,storage检索到后将数据发送给客户端。
在下载流程中,tracker挑选storage的细节:由于同一group内storage以异步形式存储数据,所以当源storage存储数据完成后,客户端马上请求刚刚上传的数据,这时其他storage节点很有可能没有完成数据同步,所以tracker需要根据时间戳信息进行判断哪些storage可接受客户端的数据请求。
3、MogileFS和FastDFS比较
FastDFS的性能要优于MogileFS,原因在于,FastDFS采用c++较为底层的语言实现,效率要比perl编写的MogileFS高,而且FastDFS裁剪了DB这一角色,将元数据直接保存在storage中更加提升了性能。
FastDFS缺点在于,当一个storage中的某一目录挂载的磁盘损坏的话,不能进行自动恢复,需要手动恢复比较麻烦。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。