1. 首页
  2. 技术分享

IPFS底层技术详解:分布式哈希表(2)

 

原创: Eric禾子 IPFS点滴资讯
为了解决节点变动的问题,1997年麻省理工的Karger等人发明了一致性哈希,这才真正让分布式存储进入到了一个真正可以规模化应用的阶段。
何谓一致性哈希呢?我们来看:
首先,将哈希值空间组织成一个虚拟的圆环,我们以SHA256来举例。本系列的上一篇中提到过,SHA256有2256个哈希值,将所有可能的哈希值组成一个圆环,从0到2256-1,按顺时针进行排序,并且在12点处0与2256-1重合,如下图:

IPFS底层技术详解:分布式哈希表(2)

         两个点应该是重合的,为了分别二者画了两个

下一步将各个节点用于存储的服务器进行一次哈希计算,可以选择服务器的IP地址或者主机名进行哈希计算(为防止主机名重叠一般使用IP地址,这里很重要,请先记住,后面会解释为什么很重要),并且按照计算所得哈希将节点服务器按照顺序放在圆环的相应位置:

IPFS底层技术详解:分布式哈希表(2)

接下来将数据的key(键,即数据的关键词)使用相同的哈希算法计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。

IPFS底层技术详解:分布式哈希表(2)

每一个数据会依据其哈希值存在相应的节点服务器中,那么这样的分布式哈希表结构和传统的相比优势体现在哪儿呢?我们来继续看:
这一天,负责3号节点的员工在检查机房的时候一脚踢掉了电源线,Node 3不工作了。如果是传统的哈希表,因为桶的数量发生了变化,所有的取余运算需要重新来过,这就会让所有的数据都需要调换位置;而在一致性哈希中,当Node 3停止工作时,数据2会按照既有规则存入Node 4,即进行重新定位:

IPFS底层技术详解:分布式哈希表(2)

也就是说当某一节点因为某种原因而停止运作时,只会影响到其逆时针方向上到上一个节点之间的数据,同样,当新加入了一个节点的时候,也只影响到其逆时针方向上到前一个节点之间的数据。
那普通的一致性哈希有没有缺点呢?当然是有的。总结一下就是:没有考虑到每台机器的情况,不能实现很好的负载均衡。我们来看:
我们假设Node 2的配置很高,性能很好,而Node 3的配置很低。但是现在很多数据由于某些特征,其哈希都在Node 2到Node 3这段弧上,直接就导致了Node 3的存储压力很大,而性能更好的Node 2反而并没有完全发挥其作用。就算所有服务器性能都很好,但当节点数量过少时,也会导致负载不均衡的情况出现。
另外,一致性哈希还存在“热点(Hotspot)”问题。
比如说,由于Node 3上存储了大量的数据,性能又一般,为了缓解其压力,在 Node 2与Node 3中间再添加Node 2x,就需要将Node 3上的一部分数据拷贝到Node 2x上。而且只有一台服务器:即Node 3参与拷贝,这会引起Node 3与Node 2x之间的网络负载突然增大。而此时的Node 3,就是我们所说的Hotspot。
有没有办法解决这个问题呢?
虚拟机技术的加入让这个问题得到了解决,例如当一个哈希环中只有两个节点存在:

IPFS底层技术详解:分布式哈希表(2)

可以看到,很有可能出现上图这种分配不均匀的情况,为了能在不加入物理设备的前提下实现负载均衡,我们将两个节点的IP后加入一些别的内容(例如#1、#2)再次计算哈希,得到Node 1.1,Node 1.2,Node 2.1,Node 2.2,使其实现下图中的情况:

IPFS底层技术详解:分布式哈希表(2)

当这些虚拟节点加入,数据的分配自然要发生变化,当然,这些虚拟机的物理实体只有一个,自然会存到真正的物理实体中,自然就可以让负载尽量均衡。
到这里想必读者对一致性哈希有了简单的概念了,IPFS的底层技术中,DHT是非常重要的一环,而之所以IPFS会更加偏好公网固定IP,就是因为固定IP不会改变在哈希环中的位置,进而不会造成因节点变动而产生的额外网络负载。这也是矿场收益会更高且更加稳定的原因之一。
到此,分布式哈希表DHT的基本技术已经介绍完毕,下一期将就IPFS中使用的DHT做一些介绍和科普。

原创文章,作者:Haskell,如若转载,请注明出处:https://ipfsdrop.com/tech/ipfs-underlying-technology-distributed-hash-table-2/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code