我正在寻找有关如何在动态对等网络中维护网络完整性的技术,算法等方面的信息。这个类别的实际实施,学术论文和其他任何内容都是受欢迎的。
想象一个基于点对点的网络,其中每个节点仅连接到 x 其他节点。如果没有所有节点的宏列表,则每个节点都负责维护与网络的连接。节点会下降并动态出现,这意味着每个节点都需要询问它的邻居(及其邻居?)是否有新节点要连接,以保持 x 连接数。
网络分段(网络的两半只能通过每个网络中的一个节点连接 - 如果其中任何一个发生故障,网络分成两部分),以及如何避免这种情况和有效路由(距离指标等)我的主要兴趣,但任何与具有类似描述的网络相关的内容都会很有趣。
我目前正在研究Chord DHT协议,因为它与我的要求有些相似。
答案 0 :(得分:3)
Netsukuku项目旨在为基于大型wifi的ad-hoc网络创建协议和软件实现。
From their FAQ:“Netsukuku项目基于利用wifi连接的巨大潜力的非常简单的想法,使无线社区的PC充当路由器并一起处理ad-hoc网络甚至比互联网还要大。“
答案 1 :(得分:2)
我的想法 - 不是一个完整的解决方案;没有经过实践测试,但仍可能涉及许多有趣的问题和潜在的解决方案。
必须记录和管理节点故障和重新加入的标准化时间。 为实现此目的,网络不是基于实时计算,而是基于动画帧数。 让N个前端处理器为传入的作业分配FEP ID和作业ID以及网络动画帧号。有许多实时问题甚至没有用量化时间来解决;在某些例外情况下,它有点像会计,将事件发布到应该被视为发生时,而不是任何现金移动时。
为了获得高性能,心跳包还必须包含正在执行和最近完成或放弃的作业的详细信息以及网络中主机的清单。
网络继续处理工作项并将其结果发布给相邻的同行或FEP。 FEP将完成的作业详细信息转发给客户,并可以接管失败的FEP,因为FEP中的状态只是请求上标记的最后一个序列号。
网络必须具有法定人数才能继续。外部监视器跟踪连接并通知经历连接变化的节点,无论它们现在是在法定人数之内还是之外。
如果计算机未完成工作项,因为它失败,或者新节点加入网络,则必须根据工作项ID建立新的工作分配策略,以将工作分配给其余节点,直到新的节点重新上线。
对于多个节点执行相同作业的情况(重复工作 - 可能通过合理地设计常规超时来最小化),作业必须是可回滚的,并且使用Markov链解决冲突。
为了可靠地检测可能的重复,作业必须在比危机期间(即节点失败)时接收的作业结果的超时更短的时间内自动回滚。当节点没有出现故障时,会应用较短的超时时间。
答案 2 :(得分:2)
对于无处不在的计算,已经开发了各种ad-hoc P2P网络,它们可能满足您的需求。例如,在军队中使用它来部署小型胶囊,每个胶囊与邻居交谈,通常是一些指挥中心。如果你没有中心,它可能与分布式计算有关,无论如何这里有一些链接:
答案 3 :(得分:1)
为了避免重新发明轮子,请查看各种路由协议。鉴于您的情况,OSPF可能是一个很好的起点。当然,有许多变量可能使它不是您的最佳选择。如:
答案 4 :(得分:0)
你看过Kademlia了吗?它类似于Chord,它的版本由BitTorrent和eMule使用。 paper列出了一些确保网络完整性的措施,即使面对攻击也是如此。
是两个基本的我不确定这对Chord有多少适用,因为我没有读过那么多,但我认为使用DHT是一个好主意,除非你需要模糊搜索。
答案 5 :(得分:0)
使用和弦。 http://en.wikipedia.org/wiki/Chord_(peer-to-peer)
我之前在项目中实现了它,它解决了这些问题。