区块链技术入门 | 分布式哈希表(上篇)

栏目: 后端 · 发布时间: 5年前

DHT 即分布式哈希表,是实现分布式存储和下载的关键技术,现已广泛应用在P2P网络中。想要了解分布式哈希表的技术实现,首先需要知道什么是哈希算法和哈希表。

哈希算法简单来说就是一个函数,这个函数有一些特殊的性质:

1. 无论输入有多复杂,输出的长度都是固定的。

2. 无论输入发生多么微小的变化时,输出都会与之前完全不同。

3. 无法通过哈希值倒推原信息,也就是不可逆。

哈希表,又称为散列表,这个表是用来存放键值对的。当给文件加密时,不仅仅需要存储文件的哈希,也需要存储文件本身。这样就需要将文件和哈希成对存储以方便查找。

对于普通的哈希表而言,扩容的代价是很大的。因为普通的 Hash 计算地址方式如下: Hash(Key)%M ,扩容之后,元素的位置全变了。有数学证明,扩容成两倍大小,使得再哈希的元素个数最少,这也是为什么为了减少扩容时元素的移动,总是将哈希表扩容成原来大小的两倍的原因。

所以哈希表的本质,就是当你寻找某个信息时,最终都是一个将哈希值取余去寻找某个位置的一个过程,但我们也看到了,当有新的节点加入或者旧节点退出时,都需要重新存放键值对,当信息量较大的时候就容易导致网络阻塞。

为了解决节点变动的问题,1997 年麻省理工的 Karger 等人发明了一致性哈希,这才真正让分布式存储进入到了一个真正可以规模化应用的阶段。

什么是一致性哈希呢?

首先,将哈希值空间组织成一个虚拟的圆环,我们以 SHA256 来举例。SHA256 有 2^256 个哈希值,将所有可能的哈希值组成一个圆环,从 0 到 2^256−1,按顺时针进行排序,并且在 12 点处 0 与 2^256−1 重合。

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

区块链技术入门 | 分布式哈希表(上篇)

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

区块链技术入门 | 分布式哈希表(上篇)

这样,当某一节点因为某种原因而停止运作时,只会影响到其逆时针方向上到上一个节点之间的数据,同样,当新加入了一个节点的时候,也只影响到其逆时针方向上到前一个节点之间的数据。

普通的一致性哈希有没有缺点呢?当然是有的。总结一下就是:没有考虑到每台机器的情况,不能实现很好的负载均衡。

有没有解决办法?有,就是虚拟机技术。例如当一个哈希环中只有两个节点存在:

区块链技术入门 | 分布式哈希表(上篇)

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

区块链技术入门 | 分布式哈希表(上篇)

当这些虚拟节点加入,数据的分配自然要发生变化,当然,这些虚拟机的物理实体只有一个,自然会存到真正的物理实体中,自然就可以让负载尽量均衡。

IPFS的底层技术中,DHT是非常重要的一环,而之所以IPFS会更加偏好公网固定IP,就是因为固定IP不会改变在哈希环中的位置,进而不会造成因节点变动而产生的额外网络负载。这也是矿场收益会更高且更加稳定的原因之一。

到此,分布式哈希表DHT的基本技术已经介绍完毕。

(作者:区小白)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业者手册

创业者手册

[美] 史蒂夫·布兰克、[美] 鲍勃·多夫 / 新华都商学院 / 机械工业出版社 / 2013-1 / 89.00元

我们发现,企业的成功程度和创始人使用本书的频繁程度成正比。书中折角越多,书被翻得越破,企业取得的成功就越显著。阅读本书切忌囫囵吞枣。 所有创业者都坚信自己的道路与众不同,他们在踏上创业之路时从不设计路线图,认为其他模式或模板并不适合自己。同样是初创企业,有些能够取得成功而有些只能沦落到廉价清库的下场,看起来这似乎是运气使然,然而事实并非如此。英雄成功的故事都是一样的。初创企业实现成功之路肯定......一起来看看 《创业者手册》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具