[转] 分布式存储系统(GlusterFS, Swift, Cassandra)设计对比

标签: 存储业界 存储技术 软件技术 Cassandra GlusterFS | 发表时间:2014-02-12 19:41 | 作者:童燕群
出处:http://shentar.me

之前转过一篇分布式文件系统比较的文章, 几大分布式文件系统全方位比较,这里再从存储的角度转一个。应该说者三个开源软件各自侧重的领域不一样,但是都具备分布式存储的特征,因此这篇文章主要是从存储的角度来进行对比。

存储系统(GlusterFS,Swift,Cassandra)设计对比

总结:

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,稳定性没有得到充分的验证,可能也会让我们却步。

转载信息: 链接

相关 [分布 系统 glusterfs] 推荐:

开源分布式文件系统GlusterFS 3.3 发布

- - InfoQ cn
Gluster团队在2012年5月31日发布了 GlusterFS 3.3. GlusterFS的上一个稳定版本号是3.2.6,虽然从版本号上看貌似改进并不大,如果你仔细阅读了3.3的新特性列表之后,也许会觉得GlusterFS社区的版本号取得太保守了. 作为Gluster项目的一部分,GlusterFS项目在2005伊始.

[转] 分布式存储系统(GlusterFS, Swift, Cassandra)设计对比

- - 忘我的追寻
之前转过一篇分布式文件系统比较的文章, 几大分布式文件系统全方位比较,这里再从存储的角度转一个. 应该说者三个开源软件各自侧重的领域不一样,但是都具备分布式存储的特征,因此这篇文章主要是从存储的角度来进行对比. 1、 文件定位:三者均采用hash算法,另外amazon的Dynamo也是采用一致性哈希;还有采用中心路由的定位方式:如HBASE,HDFS.

基于glusterfs和gearman的离线任务运算分布式化方案介绍

- - 搜索研发部官方博客
web站点服务中,我们除了存在面向用户的服务功能外,往往也存在大量的后台离线的相关计算任务,如对前端的异步操作数据队列进行定期处理,对数据库中的数据进行汇总挖掘,监控,转储,对中间数据的进一步运算处理等等……一个web服务站点的背后,往往存在大量对应的后端处理任务的功能模块,用于支撑正常的业务功能系统.

分布式缓存系统 Xixibase

- Le - 开源中国社区最新软件
Xixibase是一个高性能,跨平台的分布式缓存系统. Xixibase server 采用 C++ 实现,底层网络库采用的是Boost Asio. Xixibase 主要特点: 1. 实现'Local Cache'功能, 当客户端打开'Local Cache'选项, 客户端可以将数据同时存储在Server 端和本地,并且保证本地数据和Server 端的数据的一致性.

分布式检索系统 ElasticSearch

- - 丕子
ElasticSearch最近发展不错,github等都用它,可以关注I下. ElasticSearch是分布式,REST风格,搜索和分析系统. 具有实时数据,实时分析,分布式,高可用性,多租户,全文搜索,面向文档,冲突管理,自由模式,rest风格API,每个操作的持久性,Apache 2的开源许可证,基于Apache Lucene之上的特点.

分布式消息系统:Kafka

- - 标点符
Kafka是分布式发布-订阅消息系统. 它最初由LinkedIn公司开发,之后成为Apache项目的一部分. Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务. 在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转. 传统的企业消息系统并不是非常适合大规模的数据处理.

分布式系统介绍-PNUTS

- - CSDN博客推荐文章
PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作. 它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上. 一个表单元控制器根据服务器的负载情况,进行表单元的迁移和拆分. 每条记录的数据都没有固定的模式(采用JSON格式的文本).

Ganglia:分布式监控系统

- - CSDN博客移动开发推荐文章
1         环境安装配置. 1.1      依赖软件下载. Ganglia是伯克利开发的一个集群监控软件. 可以监视和显示集群中的节点的各种状态信息,比如如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现. 而ganglia又依赖于一个web服务器用来显示集群状态,用rrdtool来存储数据和生成曲线图,需要xml解析因此需要expat,配置文件解析需要libconfuse.

kafka分布式消息系统

- - CSDN博客云计算推荐文章
Kafka[1]是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击、分享、喜欢)以及系统运行日志(CPU、内存、磁盘、网络、系统及进程状态). 当前很多的消息队列服务提供可靠交付保证,并默认是即时消费(不适合离线).

分布式内存文件系统:Tachyon

- - 杨尚川的个人页面
Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存储在Tachyon里的文件. Tachyon是架构在最底层的分布式文件系统和上层的各种计算框架之间的一种中间件,其主要职责是将那些不需要落地到DFS里的文件,落地到分布式内存文件系统中,来达到共享内存,从而提高效率,减少内存冗余,减少GC时间等.