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



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

  1. 持续更新每个对等方的状态
  2. 执行命令
  3. 获取共享资源并将其分发给所有对等方

虽然我确实对如何实现这一点有一些想法,但我相信我只是在重新发明轮子。但是,我的Google-fu太弱,无法找到开始的参考/术语来建立进一步的搜索。

请注意,在这里建立对等体

不是问题:我有一个中央服务器,其中包含所有涉及的对等方的确切信息,对等方可以随意查询服务器。

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

  1. 保持全局状态,让对等方知道何时不同步
  2. (可能已经由 #1 完成)确定将执行下一个命令的对等方

给定同步的全局状态,2 应该相对容易:如果有任务要执行,只需将其标记为已执行,验证是否通知了所有对等方,然后执行它。

因此,我必须解决的一个真正问题是,如何维护全局状态,而无需针对状态的每次更改向所有对等方发出数百个 IP 请求。我的意思是,我知道所有对等方都必须得到通知,我只是希望有一种算法不需要原始对等方自己完成这一切。此外,某些状态更改可以同时被多个对等方检测到,并且可能已经存在解决此类冲突的东西。

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

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

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

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

四处搜索发现我这个问题指向一个 JGroups 库,该库在教程中特别提到了我的用例 (2.6.额外积分:维护共享群集状态)。

我正在研究它,但不确定这是否是要走的路。似乎涵盖沟通,但不包括冲突解决。

最新更新