关于
我的项目
相关阅读
热度排行
- [转] 宫崎骏用动漫教给我们的人生哲理,每一句都能说到心里! - (日期:[八月 24, 2013] 点击:[53,222])
- Google 网页爬虫报告无法连接站点解决办法 - (日期:[七月 20, 2014] 点击:[38,641])
- 架设Tiny Tiny RSS(TTRSS)阅读器,找回Google Reader! - (日期:[九月 27, 2013] 点击:[27,769])
- SkyDrive、DropBox和Google Drive三大公有云存储服务对比 - (日期:[六月 25, 2013] 点击:[25,574])
- 升级到至强E5440后,与i5 CPU笔记本性能对比 - (日期:[二月 18, 2014] 点击:[23,713])
- 公钥私钥加密解密数字证书数字签名详解 - (日期:[四月 19, 2014] 点击:[22,959])
- 本站建站技术合集 - (日期:[九月 20, 2013] 点击:[22,490])
- 使用OpenerDNS解决无法访问Google的问题 - (日期:[七月 5, 2014] 点击:[21,789])
- WordPress博客添加“返回顶部”按钮 - (日期:[七月 14, 2013] 点击:[21,203])
- Linux文件系统基础之inode和dentry - (日期:[三月 13, 2015] 点击:[20,167])
- 云存储中的HTTP鉴权算法分析 - (日期:[二月 7, 2014] 点击:[18,639])
- 存储基础知识之——磁盘阵列原理及操作实战 - (日期:[二月 9, 2014] 点击:[17,491])
- 精选37条强大的常用linux shell命令组合 - (日期:[九月 4, 2013] 点击:[17,429])
- DNS原理、架构和配置详解 - (日期:[九月 6, 2013] 点击:[16,803])
- Netty和Jetty的Java NIO 网络框架模型分析 - (日期:[七月 13, 2013] 点击:[16,333])
- CoreOS 初识之安装 - (日期:[十一月 16, 2014] 点击:[16,170])
- Windows与Linux文件系统互访的几种方法 - (日期:[八月 21, 2014] 点击:[15,733])
- Dijkstra算法求解最短路径分析 - (日期:[七月 12, 2014] 点击:[14,924])
- NAS解决方案实现多媒体文件共享播放 - (日期:[十二月 21, 2014] 点击:[13,915])
- 简介 - (日期:[九月 1, 2012] 点击:[13,757])
- 如何编程实现 2 + 2 = 5? - (日期:[六月 2, 2014] 点击:[13,269])
- 搭建了一个iNews程序 - (日期:[十月 15, 2013] 点击:[13,236])
- 2014年9月曝出的Bash ShellShock漏洞简析 - (日期:[九月 26, 2014] 点击:[13,138])
- 彻底解决WordPress博客垃圾评论的问题 - (日期:[八月 5, 2013] 点击:[13,086])
- 如何使用1M的内存排序100万个8位数 - (日期:[三月 27, 2014] 点击:[12,552])
- 全部日志列表 - (日期:[十一月 11, 2012] 点击:[12,328])
- 关于回调函数和this指针探讨 - (日期:[八月 24, 2014] 点击:[12,209])
- 给定一个long型常量,其值为x,给定long型变量a,要求a & x 的取值集合 - (日期:[九月 8, 2012] 点击:[11,703])
- WordPress建站必备实用插件 - (日期:[八月 7, 2014] 点击:[11,360])
- Amazon 云计算业务全面介绍 - (日期:[三月 9, 2014] 点击:[11,268])
分类目录
文章归档
- 2024年四月 (1)
- 2024年二月 (1)
- 2023年九月 (1)
- 2023年一月 (1)
- 2022年十月 (1)
- 2022年八月 (2)
- 2022年四月 (1)
- 2022年三月 (1)
- 2021年十二月 (2)
- 2021年十月 (2)
- 2021年九月 (1)
- 2021年八月 (1)
- 2021年五月 (1)
- 2021年三月 (2)
- 2021年一月 (2)
- 2020年十二月 (5)
- 2020年十一月 (2)
- 2020年十月 (2)
- 2020年九月 (1)
- 2020年八月 (5)
- 2020年七月 (2)
- 2019年九月 (1)
- 2018年八月 (1)
- 2018年七月 (1)
- 2018年六月 (1)
- 2018年五月 (1)
- 2018年三月 (1)
- 2018年二月 (1)
- 2018年一月 (2)
- 2017年十二月 (3)
- 2017年十月 (4)
- 2017年九月 (1)
- 2017年七月 (1)
- 2017年六月 (1)
- 2016年十二月 (1)
- 2016年十月 (1)
- 2016年九月 (1)
- 2016年七月 (2)
- 2016年六月 (1)
- 2016年二月 (3)
- 2015年十二月 (3)
- 2015年十一月 (2)
- 2015年十月 (1)
- 2015年八月 (2)
- 2015年七月 (4)
- 2015年六月 (1)
- 2015年三月 (2)
- 2015年二月 (1)
- 2015年一月 (4)
- 2014年十二月 (2)
- 2014年十一月 (2)
- 2014年十月 (5)
- 2014年九月 (8)
- 2014年八月 (11)
- 2014年七月 (17)
- 2014年六月 (7)
- 2014年五月 (15)
- 2014年四月 (16)
- 2014年三月 (14)
- 2014年二月 (5)
- 2013年十二月 (5)
- 2013年十一月 (3)
- 2013年十月 (13)
- 2013年九月 (13)
- 2013年八月 (13)
- 2013年七月 (9)
- 2013年六月 (8)
- 2013年五月 (1)
- 2013年三月 (3)
- 2013年一月 (1)
- 2012年十一月 (1)
- 2012年九月 (12)
- 2012年八月 (3)
- 2011年二月 (1)
- 2009年三月 (1)
- 2009年二月 (1)
- 2008年十一月 (1)
- 2008年六月 (1)
- 2008年四月 (1)
- 2008年三月 (1)
[转] 分布式存储系统(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,稳定性没有得到充分的验证,可能也会让我们却步。
转载信息:链接。