Distributed Hash Tables, Part I

DHT是有鲁棒性的p2p网络中的必要组成部分。
在分布式的世界里,DHT最近有了革命性的影响。
DHT算法的知识即将成为分布式应用开发的关键组成部分。
基本上,DHT是hash table的表现。我们可以把key和value成对存储。
可以通过key来检索到value。
有意思的是DHT是被分布式在多台机器上存储和检索的。
和已经存在的主/从数据库响应结构不同的是,所有节点是对等的,这样这些节点可以自由的加入和退出网络。
尽管表面上随机的变化会影响网络中节点成员关系,但可以证明DHT有性能上的担保。
为了开始DHT的设计,我们需要有一个环,双向链表。
链表中的每个节点都是网络中的一台主机。
每个节点都有个地址的参照,根据链表中的相邻节点。
因此,我们必须定义一个顺序以便判定谁是后继结点。
Chord DHT定义一个后继结点的方法是:分配一个k bits(2的k次方个)唯一的随机ID给每个节点。
在环内顺时针方向,节点的ID号是递增的。
对每个节点,它的后继结点都是顺时针方向距离最短的那个节点。
只有一个例外,对大ID的那个节点后继是最小ID的节点。
Listing 1. ringDistance.py

       
每个节点本身都是一个标准的hash table。
你所要做的事就是存储和检索。
首先,把key哈希成一个有k比特长度的数字,这个数字就是ID。
然后判断出哪个节点是它的后继,根据环中任意一个节点开始,直到找到最近的那个但是仍然比它大的那个节点。
通过hash来形成key。

Listing 2. findNode.py


   
DHT虽然设计简单,却达到了服务于分布式哈希表的目的。
值得注意的是,虽然例子中的代码——双向链表看起来相当正常,它仅仅是DHT的一个模拟。
在真正的DHT中,每个节点都在不同的主机上,对它们所有的命令都需要在类似于socket protocol上通信。
为了使当前的设计更加有用,最好为节点的加入和退出,或者故意失败做好解释。
为了有这个特征,我们必须为我们的网络建立一个加入退出协议。
Chord 加入协议的第一步是用普通的lookup协议检索出新节点的后继。
新加入节点应该被插入在后继和前驱节点之间。

 

 

 


If you have any questions or ideas ,please feel free to contact me : )

thx.^^


QQ: 1623213673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值