保持状态在多个对等体之间同步

时间:2016-07-11 08:12:58

标签: algorithm p2p mesh-network

我需要创建一个(希望)简单的p2p网络,其中所有客户端都需要维护一组共享的设置。我的网络需要做的一些事情:

  1. 持续更新每个对等方的状态
  2. 执行命令
  3. 取指&将共享资源分发给所有对等方
  4. 虽然我对如何实现这一点有一些想法,但我确信我只是在重新发明轮子。但是,我的Google-fu太弱了,无法找到建立进一步搜索的起始参考/术语。

    请注意,建立对等体不是问题所在:我有一个中央服务器,其中包含所有相关对等体的确切信息,对等体可以随意查询服务器。

    我相信我的问题可以分为两个或简化 - 只有一个问题:

    1. 维持一个全局状态,其中同伴可以知道他们何时不同步
    2. (可能已经由#1完成)确定将执行下一个命令的对等方
    3. 鉴于同步全局状态,

      2应该相对容易:如果要执行任务,只需将其标记为已采用,验证是否已通知所有对等方,然后执行它。

      因此,我必须解决的一个真正问题是如何维护一个全局状态,而不会对状态中的每次更改向所有对等方发出数百个IP请求。我的意思是,我知道所有同行都必须得到通知,我只是希望一种算法不需要源同伴自己完成。此外,一些状态变化可能同时由多个对等体检测到,并且可能存在已解决此类冲突的事情。

2 个答案:

答案 0 :(得分:0)

你的陈述中有一些矛盾,因为你有一个带中央服务器的p2p网络,但我想我得到了你想要的东西。

首先查看分布式哈希表:https://en.wikipedia.org/wiki/Distributed_hash_table

DHT基本上是一种向p2p网络分配和查找任意数据的方法。在您的情况下,除了数据之外,您似乎还有其他任务。您可以修改实现以为每个任务提供一些唯一的ID(优选地是一些分布均匀的哈希),然后运行DHT算法来识别将保存数据的对等方(如果它是常规数据),而不是存储您将执行的内容计算。

你注意到我没有谈论存储状态。这是因为在该解决方案中,状态分布在p2p网络上。没有节点保持整个状态,但是任何人都可以查询网络(使用正确的ID)来获得他们需要的任何状态。

答案 1 :(得分:0)

在很多地方搜索时发现我this question指向JGroups库,该库专门提到了the tutorial中的用例( 2.6。额外信用:维护共享群集状态< / em>的)。

我正在研究它,但不确定它是否可行。似乎涵盖了沟通,但没有解决冲突。