• 几年下来,前前后后接触过几个存储系统了,感觉接触多了,发现不同系统在设计的时候大都采用相似的理论,因此就梳理下。     GlusterFS Swift Cassandra ...选举算法,选出一个源节点

    几年下来,前前后后接触过几个存储系统了,感觉接触多了,发现不同系统在设计的时候大都采用相似的理论,因此就梳理下。

     

    GlusterFS

    Swift

    Cassandra

    路由算法

    普通哈希算法

    一致性哈希算法

    一致性哈希算法

    数据恢复方式

    选举算法,选出一个源节点

    副本之间定时检查md5值

    副本之间检查校验值

    数据恢复阶段

    读的时候恢复(read repair)

    周期性检查恢复

    读的时候恢复(read repair),周期性检查恢复

    节点存活性检测

    心跳

     

    心跳

    对CAP支持

    CA

    AP

    AP

    写数据

    最终一致性;直接将文件写到磁盘

    弱一致性,最终一致性;直接将文件写到磁盘上

    强一致性与最终一致性;将文件以日志的方式顺序写到磁盘,同时写到内存,当数据达到某条件flush到磁盘(与hbase一致)

    架构方式

    存储节点对等,无中心(gossip协议)

    存储节点对等,无中心

    存储节点对等,无中心(gossip协议)

    增减节点

    如果是冗余卷,需要一次加入多台节点

    任意加入节点数均可

    任意加入节点数均可

    读数据

    1.hash定位到数据所有副本;

    2.读取之前先检查数据是否需要恢复;

    3.通过RR算法读取副本;

    NRW(W+R>N)

     

    1.Quorum+NRW(W+R>N)

    2.读取时检查数据是否需要修复

    合并与压缩

    ------

    -------------

    支持

    删除数据

    立即删除

    标记为墓碑,然后周期性删除

    标记为墓碑,然后周期性删除

    总结:

    1、 文件定位:三者均采用hash算法,另外amazon的Dynamo也是采用一致性哈希;还有采用中心路由的定位方式:如HBASE,HDFS。哈希算法的特点是读写速度比较快,但是如果增减机器会造成数据移动,采用一致性哈希算法并引入虚节点的机制可以大大减少数据的移动。中心路由机制增减节点不会造成数据移动(但是为了数据均衡,生产中常常还是会执行负载均衡操作,从而也会引起数据块移动)。

    2、 数据恢复方式:GlusterFS采用了与Zookeeper类似选举leader节点的算法方式,一般情况下,该算法没什么问题,但在具体实现中,GlusterFS在某些特殊情况下可能出现脑裂,即GlusterFS不能选举出来哪份数据是完整的;swift在存储数据的时候,同时也会保存期元数据如上传时间,及其md5值等在sqlite数据库及其扩展属性内,在读取及其定时检查的时候通过检查md5值,对象大小即可确定哪份副本是OK的。Cassandra没仔细研究,但是通过其他人的分析可得出,数据恢复方式与swift类似,如周期性副本之间互相检查副本是否OK。在HDFS的处理中,数据块的恢复采用中心节点进行统一处理,通过判断DataNode是否正常(退役,死亡),数据块是否损坏来判断,如果集群规模很大,该机制就会造成中心节点(NameNode)比较忙。

    3、 写数据方式:不管是大文件还是小文件,glusterFS,swift均是每个文件单位写到磁盘上,因此如果是小文件,性能可能相对比较差,因为随机写大并发很耗费磁盘性能。Cassandra的产品特点是分布式数据库(nosql),如果是文件则主要适合存储小文件,其在存储端采用三级写:首先写日志到commitlog;然后将数据写内存,当达到一定条件(数据大小,时间,key数量)将数据flush到磁盘上,该种方式也是业界处理小文件的常用方式:如Hbase,bookkeeper(yahoo),keystack(facebook),TFS(淘宝)等都用该种方式将随机写转化成为顺序写,提供小文件的写性能。而glusterfs,swift,HDFS等系统没有这方面的小文件解决方案,所以小文件支持会比较差,同时HDFS写文件通信次数多,并且强一致性等特点也是导致小文件性能差的原因。值得一提的是HDFS,Mysql等将操作日志也是将操作追加写入到一个文件,这也是通过顺序写来提高写性能的方法。

    4、NWR:该理论值得一提, NWR是一种在分布式存储系统中用于控制一致性级别的一种策略。在Amazon的Dynamo云存储系统中,就应用NWR来控制一致性。每个字母的涵义如下:

        N:同一份数据的Replica的份数

     W:是更新一个数据对象的时候需要确保成功更新的份数

     R:读取一个数据需要读取的Replica的份数

    在分布式系统中,数据的单点是不允许存在的。即线上正常存在的Replica数量是1的情况是非常危险的,因为一旦这个Replica再次错误,就可能发生数据的永久性错误。

    5、增减节点:在线上环境中,添加节点是很常见的,一次往往会添加一批机器,因此添加机器的方便性,是否对集群有影响等等非常重要,这也是设计者会经常考虑的问题。

    6、数据删除:glusterFS直接删除文件,swift与cassandra采用先标记再周期性删除,后者从系统响应时间来说更加优秀,采用该方法的还有haystack,TFS等。HDFS也采用类似先标记,还可以选择放入回收站,不放入回收站也会尽快删除。其实对于小文件,也可以选择在系统比较闲的时间段进行删除(因为小文件本身占用空间就比较小)。

    7、稳定性:虽然我上面没列到,它确是最重要的一个方面,twitter等弃用cassandra可能就有这方面原因,一个系统如果设计得再牛X,稳定性没有得到充分的验证,可能也会让我们却步。

    其实还有很多方面的功能,我仅列了一部分,以后再补充。


    展开全文
  • 原文:http://blog.csdn.net/metaxen/article/details/7108958   MooseFS(MFS) Ceph GlusterFS Lustre Metadata server 单个MDS。...MDS可以扩展,不
  • 一、各种分布式文件系统对比 1.1 表格对比 技术 优点 缺点 总结 1、 HDFS 1、大数据批量读写,吞吐量高; 2、一次写入,多次读取,顺序读写; ...
  • [TOC] [分布式存储系统(GlusterFS,Swift,Cassandra)设计对比](http://blog.csdn.net/liuhong1123/article/details/12835865) -------------------------------------------...|名称|优点|缺点|总结|源码链接| ...
  • 任何一个大型网站均是根据用户的积累以及随之而来的用户数量增长,从一台服务器到多台服务器逐步架构支撑起最终的大型网站数据、用户和页面请求等业务的。任何的大型网站的系统架构并不是一开始设计时就已经完全的...
1
收藏数 6
精华内容 2
热门标签