一、分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储。
相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制。
分布式文件系统可能包含的功能有:透通的数据复制与容错。也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据损失
分布式文件系统类别
名称特性
MogileFS 适用于处理海量小文件
Ceph 是一个 Linux PB级别的分布式文件系统
MooseFS 通用简便,适用于研发能力不强的公司
Taobao Filesystem 适用于处理海量小文件
ClusterFS 适用于处理单个大文件
Google Filesystem GFS+MapReduce擅长处理单个大文件
Hadoop Distributed Filesystem GFS的山寨版+MapReduce,擅长处理单个大文件
MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器)。目前国内使用 MogileFS 的有图片托管网站 yupoo 等
MogileFS由3个部分组成:
第1个部分: 是server端,包括mogilefsd和mogstored两个程序。前者即是mogilefsd的tracker,它将一些全局信息保存在数据库 里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
第2个部分:是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。
第3个部分:是客户端API,目前只有Perl API(MogileFS.pm)、PHP,用这个模块可以编写客户端程序,实现文件的备份管理功能,提供MogileFS.pm。
当下互联网飞速发展,海量并发所产生的数据量以几何方式增长,随着信息链接方式日益多样化,数据存储的结构也发生了变化,在这样的压力下我们不得不重新审视大量数据的存储所带来了巨大的挑战:
1、数据采集:对于社交网站一般都是由用户上传的;
2、数据存储:现在是数据量大爆炸时代,每天都会产生大量的数据,所以数据存储就成了一个大问题;
3、数据搜索:如果说存储是考验数据的存储能力的话,那搜索就是考量计算机能力了,从大量的数据中搜索出来;
4、数据共享:数据存储下来之后还要进行数据的共享问题,大量的数据该怎么共享这些数据呢;
5、数据传输:而海量数据存储下来之后数据怎么用户与用户之间进行安全的传输;
6、数据分析:数据的分析是了解我们过去的一些行为规范;
7、数据可视化:而海量数据存储下来之后怎么样可以直观的展示在人们面前呢;
分布式文件系统的几个难点:
1、缺乏全局时钟、不过同步本身就存在时间差,很难做到步调一致,
2、面对故障的独立性,分布式是由多个节点组成的,而每个节点都是独立工作的,一个节占故障度不会影响其它节点正常工作,
3、如何去处理单点故障, 一是:做冗余,对单点做备份;二是:降低单点故障的影响范围
4、事务类的挑战,在分布环境中怎么处理事务呢;ACID或2PI(两段式提交)、最终一致、BASE法则、CAP理论、Paxos算法;