一致性hash原理及在存储中的应用

在做分布式存储方案设计时面临的一个重要问题是如何记录数据在多个存储节点上的分布情况。当前分布式存储在元数据管理上有两种架构,去中心化和中心化。在去中心化的分布式系统中元数据分布通常通过计算得出,比如ceph和glusterfs,这种情况下不需要元数据服务器参与。
中心化的分布式存储系统中例如cephfs、hdfs、gfs、tikv等,需要通过中心化元数据服务器来存储当前系统的元数据信息,并且元数据服务器参与IO,在IO过程中会访问元数据服务器获取IO的元数据信息。

中心化是采用元数据服务器(MS)的方式集中存储数据块在存储节点上的映射关系。采用元数据服务器方式可以很好的将数据和元数据分离,当需要访问数据块的时候,可以直接从元数据服务器上获取该数据块的映射信息。基于MS的分布式存储架构如下图所示:

基于元数据服务器的方式是分布式存储的经典架构,因其技术成熟、安全可靠至今还是分布式存储中的常见配置。具体来说具有以下几个优点:

(1)、设计实现简单

(2)、扩容方便,因为数据和元数据分离,可以轻松实现存储节点扩容。

(3)、元数据管理方便,数据分布的均衡、迁移都比较方便

虽然看起来很完美,但是还是存在如下两大主要问题:

1,可扩展性受限于元数据服务器的能力。所有的元数据信息都集中在元数据服务器上面,所以,当Client想要获取元数据时就需要访问该服务器。因此,整体的带载能力(Client的个数)就受限于元数据服务器的能力。元数据服务器就是整个分布式系统的潜在瓶颈点。特别当Client访问小文件时,会产生大量的元数据信息,此时元数据服务器就会成为系统性能瓶颈。

2,一旦元数据服务器发生故障,整个分布式存储系统将无法正常工作,因此,元数据服务器的可靠性尤为重要。

总结起来,集中式元数据服务器的最大问题在于性能和可靠性。针对集中式元数据存储也有很多优化手段,例如,针对性能问题多采用NVDIMM等非易内存作为缓存,在client和元数据服务器多级元数据缓存,一次元数据多申请些尽量减少和元数据服务器通信等手段进行缓解。针对可靠性问题,一般采用分布式元数据服务器,避免单节点元数据故障导致整个元数据服务不可用。市场上分布式元数据服务开源产品也比较多,技术也比较成熟。

但论怎么优化,采用元数据服务器方式的分布式存储都不能达到线性可扩展的目的。基本上扩展能力呈现对数LOG的曲线方式。为了达到线性可扩展的能力,业界开始考虑如何去掉元数据服务器,即去中心化。其中发展出来的算法有HASH算法、一致性HASH算法、弹性HASH算法和CRUSH算法。此处重点讨论一致性HASH算法。

在谈到一致性HASH的时候,首先需要考虑HASH算法。在分布式存储中应用的HASH算法很简单,其可以描述如下:

当Client需要将一块数据写入存储节点是的时候,可以将数据块的逻辑地址和文件名作为Key值算出一个HASH值,这个HASH算法需要有很好的分布特征。在得出这个HASH值之后,再和Storage Node的个数N做取余操作,得出的结果在0到N-1之间,该结果就是需要访问的Storage Node编号。从这种方法来看读写过程不需要元数据服务器的介入,文件和存储节点之间的映射关系由HASH函数来决定,并且是可计算的。

HASH算法看起来非常的完美,但是,其问题在于如果动态增加一个节点之后,这种数据映射关系就会遭到破坏,原因在于HASH算法中的N发生了变化。为了建立新的映射关系,不得不需要引入大量的数据迁移操作,这在大规模分布式存储中是不允许发生的。为了解决这个问题,引入了一致性HASH算法。

一致性HASH的核心思想是将HASH结果域做成一个空间,并且为所有的存储节点分配一个标签值,这些标签值属于这个HASH值空间。通常这种关系可以描述成一个哈希环,这个空间就构成了这个HASH环,所有存储节点是这个环上的一个点。可以描述如下:

当Client需要将一个块数据写入Storage的时候,同样可以将数据块的逻辑地址和文件名作为HASH函数的参数,然后得到一个HASH值。这个得到的HASH值肯定会属于HASH值空间,也就是说在HASH环上面肯定可以找到一个对应的点。例如,这个点位于SN1和SN2之间。按照协议,可以选择顺时针离HASH值最近的节点作为数据存储点。即新写入的文件可以存入SN2。

一致性HASH算法的最大优点在于避免添加存储节点之后的大规模数据迁移。例如在刚才的例子中,如果后来在SN1和SN2之间添加了一个SN6,那么原先存入SN2中的一部分数据需要迁移到SN6,但是,其余节点不需要做任何的数据迁移操作。

显然这种方法大大降低了数据迁移量,又能很好的避免元数据服务器带来的问题。因此,一致性HASH算法被广泛应用到了CDN系统、SWIFT对象存储系统、Amazon的dynamo存储系统中。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值