阅读 308

Hadoop笔记汇总系列第六篇-分布式存储系统

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

背景

这是Hadoop笔记汇总系列的第六篇,在研究HDFS存储机制的时候,把其它分布式存储系统也一起看了看,下面把相关笔记汇总一下.

分布式存储系统

不同的分布式存储系统的路由算法

  1. Swift和Cassandra都是采用一致性哈希算法来做路由

读写速度比较快,但是如果增减机器会造成数据移动,采用一致性哈希算法并引入虚节点的机制可以大大减少数据的移动

  1. HBase和HDFS采用中心路由的定位方式

增减节点不会造成数据移动,但是为了数据均衡,生产中常常还是会执行负载均衡操作,从而也会引起数据块移动

自己对中心路由算法的理解:

  1. NameNode会维持一个网络拓扑结构,一个具有树状网络拓扑结构的计算机集群,例如,一个集群可能由多个数据中心(Data Center)组成,在这些数据中心分布着为计算需求而设置的很多计算机的机架(Rack)
  2. 然后根据这个拓扑结构来得到需要路由到哪些节点去

写数据方式比较

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

NWR理论

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

  • N:同一份数据的Replica的份数
  • W:是更新一个数据对象的时候需要确保成功更新的份数
  • R:读取一个数据需要读取的Replica的份数

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

读写数据时一致性的处理

GlusterFS

  1. 写时: 采用的是最终一致性;直接将文件写到磁盘
  2. 读时: hash定位到数据所有副本;读取之前先检查数据是否需要恢复;通过RR算法读取副本

Swift

  1. 写: 弱一致性,最终一致性;直接将文件写到磁盘上
  2. 读: NRW(W+R>N)

Cassandra

  1. 写: 强一致性与最终一致性;将文件以日志的方式顺序写到磁盘,同时写到内存,当数据达到某条件flush到磁盘(与hbase一致)
  2. 读: Quorum+NRW(W+R>N);读取时检查数据是否需要修复

数据删除比较

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

文章分类
后端
文章标签