时间:2014-11-16
做者:FingerLiu
这是程序员的智囊库系列的第三篇文章。上一篇文章原本打算介绍几个搭建网站的框架,但因为这部分的内容较多,还须要再整理一段时间,因此先放出这部分的第三篇文章。这一部分咱们讲介绍分布式存储相关的一些知识,以及当下(2013-10-29)主流的分布式文件系统。因为有些NoSQL数据库也能够用来作分布式文件系统的替代物,因此这部分咱们还将介绍几个NoSQL数据库。主要讲介绍如下几种分布式文件系统和NoSQL数据库:
- nfs
- ceph
- TFS
- GlusterFS
- MooseFS
- PVFS2
- GPFS
- HDFS
- FastDFS
- MogileFS
- Lustre
- GoogleFS
- memcached
- Tokyo Tyrant
- Redis
- MongoDBhtml
以前公司一直用nfs作文件服务器,nfs的好处就是配置简单,使用方便。但缺点是当数据量不少,尤为是小文件多的时候,其性能使人堪忧,每每会成为整个系统的性能瓶颈。因此准备在未来考虑用性能更好的方法替代nfs,因而花大工夫整理调查,横向对比了各分布式文件系统。调查报告的详细结果整理在这里,本文是从中抽出几个概要部分稍做讲解,具体内容请参见调查报告原文。我把分析报告原文放到了七牛上,但我感受它最近不太稳定,若是下载不了,请与我联系,或直接在下面评论里留邮箱。node
注:原本调查报告分两部分,理论分析报告和性能测试报告。本文的目的是介绍给你们更多的知识,扩展知识面,增长知识的广度。而不是说直接告诉你,这个比那个好,你用这个,别用那个。尤为是性能测试这种东西,别人的测试结果的参考价值并非很大,必须沉下心来,本身去一点点的测才能找到最适合本身的工具、参数。所以,本文只给出了理论分析报告,并无给出性能测试报告。linux
元数据的概念:data about data
数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,
诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。
在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。
用户须要操做一个文件必须首先获得它的元数据,才能定位到文件的位置而且获得文件的内容或相关属性。
元数据对文件系统的影响:文件系统对元数据的操做占据了传统文件系统总负荷的近一半。
高效的元数据管理方式对提升整个系统的性能相当重要。
A comparison of file system workloads. 2000 USENIX Annual Technical Conference程序员
当一台服务器出现故障后,整个服务器群瘫痪。
解决方案:
1 TFS 利用linux 高可用性(HA)机制,配置HA元数据服务集群。但这样只能配置主设备和从设备,事实上同一时刻仍是只有一个服务器在服务。这样作只能提升系统的稳定性,并不能解决采用集成式元数据服务模式的瓶颈问题(因为系统须要同步,反而会下降性能)。
2 Ceph GPFS 分布式元数据服务模型 将负载分散到多台服务器解决了性能瓶颈问题,利用对等的服务器或冗余元数据服务分区解决了单点故障问题。分布式看似很是完善,然而它大大增长了设计实现上的复杂性,同时可能会引入了新的问题,即性能开销和数据一致性问题。web
3 GlusterFS 无元数据服务模型
无元数据服务器设计的好处是没有单点故障和性能瓶颈问题,可提升系统扩展性、性能、可靠性和稳定性。对于海量小文件应用,这种设计可以有效解决元数据的难点问题。它的负面影响是,数据一致问题更加复杂,文件目录遍历操做效率低下,缺少全局监控管理功能。同时也致使客户端承担了更多的职能,好比文件定位、名字空间缓存、逻辑卷视图维护等等,这些都增长了客户端的负载,占用至关的CPU和内存。数据库
高可用性H.A.(High Availability)指的是经过尽可能缩短因平常维护操做(计划)和突发的系统崩溃(非计划)所致使的停机时间,以提升系统和应用的可用性。它与被认为是不间断操做的容错技术有所不一样。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。
实现方法:
1. heartbeat:比较经常使用
2. rhcs:redhat集群套件--redhat cluster suite 图形界面,实现方便,可有100多个节点
3. corosync/openais + paceker
2个节点:
采用主备模式:一台激活,另外一台备份,对外呈现一个虚拟ip地址。两个节点之间采用心跳线,备份节点使用心跳线来探测活动节点是否处于活动状态。
心跳线:双绞线 或光纤跳线或 serial线
采用主主模式:两个节点,在提供web服务时,左侧为激活状态,右侧为备份状态;在实现mail服务时, 一个为激活状态,一个为备份状态。缓存
Filesystem in userspace
在用户态实现的文件系统安全
为何使用FUSE:服务器
首先要了解用户态和内核态
为了保证系统安全,在用户态执行的代码被硬件限制,不能进行某些操做,如修改其余程序的存储空间、修改配置文件、杀死其余进程、重启等。
而在内核态(核心态)执行的代码,能够不加限制地对系统存储、外部设备进行操做。网络
可是从用户态切换到核心态须要很大的开销。
因此FUSE有以下优势:
可以大幅提升效率,简化了为操做系统提供新的文件系统的工做量,特别适用于各类虚拟文件系统和网络文件系统。
GPL GPL2 GPL3 LGPL AGPL
无目录结构、扁平化存储是海量存储的将来发展方向
通常来说计算机内部对文件的操做和查找不是按目录进行定位的
目录结构彻底是为了方便用户浏览。
于是,一些不会与用户直接打交道的数据,彻底能够不用目录结构存储。设计新产品的时候能够采用扁平化设计。
关于存储,分布式存储,分布式文件系统的更多信息,能够参见如下几本资料:
1. 刘爱贵整理的《分布式文件系统》。分布式文件系统的大致认识。
2. 张冬写的《大话存储》和《大话存储2》。这个系列的书讲得很是通俗易懂,并且很详细,例子也很生动,我认为能够做为国内的权威了。
3. 《海量存储》
如何才能选择最好的分布式文件系统呢?没有最好的分布式文件系统,只有最适合你的实际状况的。不是说最近ceph很火,ceph就必定适合你,必定要在认真分析你的实际状况后,经过理论参数作出初步筛选,而后经过性能测试来作最后的筛选,切不可鲁莽选择。
详细的理论比对请参见理论分析报告的原文!