我正在尝试了解Distributed Hash Table (DHT)范例,因为它适用于P2P或完全分布式计算架构。从理论的角度来看,一旦建立了一个集群,它就会对如何设计集群数据和分配工作有所了解。
对我来说最有趣的部分是架构从不需要某种集中控制器或协调器(没有单点故障)。但是,我仍然在努力理解这个概念的实际执行,特别是如何集群形成。如果它是一个完全分布式的系统,节点如何知道如何“加入”已经建立的集群?
在一个简单的例子中:
那么,如果没有任何集中式服务器充当信标,或者提供将新客户端引入集群的方法,新客户端如何“连接”?
答案 0 :(得分:7)
这是我在论文中提到的一个问题,我从未找到过我满意的解决方案。问题是在加入网络之前,你需要关于其他一个对等体的某种信息,得到第一个地址就是硬盘。
我想出了一些想法:
最后一个选项是唯一真正分散的方法。这三者的组合可能是最好的。
在断开连接并不困难后,一旦你被引导到网络重新建立连接,只需保存网络中已经存在很长时间的几千个节点的地址,其中至少有一个节点仍然会在下次在线
答案 1 :(得分:1)
据我所知,您可以为DHT节点的网络创建代理服务器,并为该代理服务器提供影子服务器以提高可靠性。
任何试图加入DHT网络的新节点都与代理进行对话,并且代理将其放入完全为P2P的DHT网络中。
这样,只有代理服务器必须是公共的,所有其他DHT节点都可以拥有其IP的私有。
这可能是您的障碍,因为该应用程序分布在Internet上,但是您始终可以通过代理进行交谈。
答案 2 :(得分:0)
事实上,维护Distributed Hashtable(DHT)源的主干的一方是该DHT实例的GOD,因此是main单点故障。如果DHT从匿名网络(Tor,GNUnet,Chimera等)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我还没有测试过这些想法,但我希望我当前的评论有所帮助。