db2有主键时默认hash分区_Open-swift: 一致性hash和Ring介绍

一致性Hash算法

面对海量级别的对象,需要存放在成千上万台服务器和硬盘设备上,首先要解决寻址问题,即如何将对象分布到这些设备地址上。Swift采用一致性hash算法来实现PUT,GET账户,容器和对象文件的高效寻址。

一致性散列技术,通过计算可将对象均匀分布到虚拟空间的虚拟节点上,在增加或删除节点时可大大减少需移动的数据量;虚拟空间大小通常采用 2 的 n 次幂,便于进行高效的移位操作;

Ring环形空间

abd58b9df0b0ecc0a8c17054283a6b4b.png

hash算法将value映射成一个0—2**32-1的数值空间。

对象映射到Ring

假设有四个对象、通过hash函数计算每一个对象对应的hash值在环上的分布如下。swift中利用了MD5哈希算法,根据对象的名字进行hash的:

hash(object1)=key1;

...........

hash(object4)=key4

ee92224234de34d23311719aa7ac208a.png

存储设备映射到Ring

对应存储设备,利用同样的Hash算法,将value映射到环上,假如有三个设备device1,device2,device3,他们对应的hash值为dev1,dev2,dev3,其在Ring上的分布如下图所示。

83dfcf497c621a7db80b527420eecf72.png

对象和设备的映射

现在设备和对象通过hash算法都映射到了Ring上,那么如何将对象映射到将要存储的设备上呐,在这个环,每一个对象从自己在环上的位置开始,按顺时针方向移动,直到遇到一个设备,则把对象存入到此设备上,如上图所示,则key1会映射到dev2,key4映射到dev3,key3,key2映射到dev1。如果增加一个设备device4,若其hash值为dev5,其在Ring上的映射为

83dfcf497c621a7db80b527420eecf72.png

对于新增的设备device4,环中需要变动的对象只有key3所对应的对象,它在按顺时针找设备时找到的是device4而不是device1,其他的数据存储不变,这样减少了数据的迁移。

虚拟节点

虚拟节点实际上是实际节点在空间中的复制品,一个实际的节点对应若干个虚拟的节点,加入虚拟节点后,对象的存储从对象—设备的映射转换为对象——虚拟节点——设备的映射,虚拟节点在空间中按hash值排列。假如虚拟节点为20个,他们均匀的分布在Ring中,每一个设备对一个的虚拟节点为5个,对象映射设备时变为如图所示的过程:

de2fe3b3d8d917f4811cd7879a60ad25.png

Ring(环)的数据结构由以下信息组成

存储设备列表、设备信息包括唯一标识号(id)、区域号(zone)、权重(weight)、IP 地址(ip)、端口(port)、设备名称(device)、元数据(meta)。
分区(partition)到设备映射关系(replica2part2dev_id 数组)
计算分区号的位移(part_shift 整数,即图 1 中的 m)

1b0bf747280de7c4ab3c87f184d5ece5.png

用对象的层次结构 account/container/object 作为键,使用 MD5 散列算法得到一个散列值,对该散列值的前 4 个字节进行右移操作得到分区索引号(partition),移动位数32-PARTITION_POWER(实例图中的m);
按照分区索引号(partition)在分区到设备映射表(replica2part2dev_id)里查找该对象所在分区(partition)的对应的所有设备编号,这些设备会被尽量选 择部署在不同区域(Zone)内,区域只是个抽象概念,它可以是某台机器,某个机架,甚至某个建筑内的机群,以提供最高级别的冗余性,建议至少部署 5 个区域;权重参数是个相对值,可以来根据磁盘的大小来调节,权重越大表示可分配的空间越多,可部署更多的分区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值