MogileFS和FastDFS分布式文件系统

一、分布式文件系统

为了应对海量数据的存储和处理,分布式文件系统应运而生。
那什么是分布式文件系统?分布式文件系统将数据在物理上分布到多个存储节点上存储,并对这些存储节点进行同一管理和分配,向用户提供文件系统访问接口。node

分布式文件系统具备的特性

  • 高扩展性:可简单快速添加数据节点进行扩容操做c++

  • 冗余性:同一数据在多个节点上拥有多个副本,保证某一节点宕机数据不会丢失数据库

  • 数据复制:文件系统可自行完成数据副本的建立服务器

  • 空间平衡:保持多个存储节点的存储空间使用率均衡负载均衡

  • 高IO能力:因为数据分散在多个节点存储,并行操做IO能力强于单机系统dom

  • 廉价性异步

二、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进行总体复制。同时也定义了文件属性,如数据副本的数量等等。

二、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可接受客户端的数据请求。
图片描述

三、MogileFS和FastDFS比较

FastDFS的性能要优于MogileFS,缘由在于,FastDFS采用c++较为底层的语言实现,效率要比perl编写的MogileFS高,并且FastDFS裁剪了DB这一角色,将元数据直接保存在storage中更加提高了性能。FastDFS缺点在于,当一个storage中的某一目录挂载的磁盘损坏的话,不能进行自动恢复,须要手动恢复比较麻烦。

相关文章
相关标签/搜索