节点如何加入分布式哈希表(DHT)群集?

时间:2012-10-23 15:59:13

标签: architecture theory p2p distributed-computing

我正在尝试了解Distributed Hash Table (DHT)范例,因为它适用于P2P或完全分布式计算架构。从理论的角度来看,一旦建立了一个集群,它就会对如何设计集群数据和分配工作有所了解。

对我来说最有趣的部分是架构从不需要某种集中控制器或协调器(没有单点故障)。但是,我仍然在努力理解这个概念的实际执行,特别是如何集群形成。如果它是一个完全分布式的系统,节点如何知道如何“加入”已经建立的集群?

在一个简单的例子中:

  • 说我正在创建一个基于DHT模型的P2P应用程序
  • 应用程序分布在Internet上(例如,不在同一网络中),任何公共客户端都可以连接到群集
  • 连接到群集的客户端可以看到群集中的一些(但不一定是所有)其他客户端
  • 未连接的客户端在群集中没有任何客户端的地址或名称。

那么,如果没有任何集中式服务器充当信标,或者提供将新客户端引入集群的方法,新客户端如何“连接”?

3 个答案:

答案 0 :(得分:7)

这是我在论文中提到的一个问题,我从未找到过我满意的解决方案。问题是在加入网络之前,你需要关于其他一个对等体的某种信息,得到第一个地址就是硬盘。

我想出了一些想法:

  • 鼓励同行发布他们的地址,这样就可以获得可公开访问的已知IP列表
  • 运行几个“众所周知的”引导对等体
  • Brute Force the address space

最后一个选项是唯一真正分散的方法。这三者的组合可能是最好的。

在断开连接并不困难后,一旦你被引导到网络重新建立连接,只需保存网络中已经存在很长时间的几千个节点的地址,其中至少有一个节点仍然会在下次在线

答案 1 :(得分:1)

据我所知,您可以为DHT节点的网络创建代理服务器,并为该代理服务器提供影子服务器以提高可靠性。

任何试图加入DHT网络的新节点都与代理进行对话,并且代理将其放入完全为P2P的DHT网络中。

这样,只有代理服务器必须是公共的,所有其他DHT节点都可以拥有其IP的私有。

这可能是您的障碍,因为该应用程序分布在Internet上,但是您始终可以通过代理进行交谈。

答案 2 :(得分:0)

事实上,维护Distributed Hashtable(DHT)源的主干的一方是该DHT实例的GOD,因此是main单点故障。如果DHT从匿名网络(TorGNUnetChimera等)nodes(以下称:anonnodes)引导,其地址已经硬编码到DHT源那么DHT被某些"No-Such-Agency"劫持的可能性不应该增加。如果与torsocks一起使用,经典wget与Tor网络地址一起使用。一个例子:

torsocks wget http://xmh57jrzrnw6insl.onion/

为了降低DHT因劫持某些自举节点而被劫持的风险,可以使用自动投票流程。我们的想法是,引导节点从硬编码的anonnodes获取地址列表,并仅从大多数列表中存在的节点获取引导。如果一些anonnodes更可信任"而不是其他人,而不是使用一个系统,每个anonnode有一个投票,"更可信赖" anonnodes可以有多个投票。

在过去,当计算机不可靠时,投票系统以一种形式使用,而不是使用不同的投票计算机,同一台计算机在同一组汇编程序命令上运行多次。计算结果进行了比较。最常见的答案被认为是正确的答案。可能在分布式哈希表的情况下,可能使用相同的方法:向不同的自举节点询问相同的问题,已知DHT节点的列表,多次通过不同的Tor会话超过一些"更长的"一段时间。

截至2014_07_xx我还没有测试过这些想法,但我希望我当前的评论有所帮助。