获取分布式系统中的节点数

时间:2015-03-25 06:33:22

标签: p2p distributed-system

我正在构建一个具有非结构化对等覆盖的分布式系统。该系统中可能有数千个节点。节点可以动态加入系统(如torrent客户端)。在系统中,每个节点想要估计系统中的节点数(猜测近似值)。

我目前正在使用集中式服务器来计算节点数。每个节点都与此服务器通信。这效率非常低,并且违反了分布式行为。

有没有办法在不使用集中式服务器的情况下以分布式方式执行此操作?

1 个答案:

答案 0 :(得分:5)

如果您只需要计算系统中节点数的估计数,并且您希望在整个群集中分配该计数而不是将其存储在数据库中,那么八卦协议是一种轻量级且有效的方法来共享此类型服务器之间的状态。

http://en.m.wikipedia.org/wiki/Gossip_protocol

一个简单的八卦实现是:定期每个服务器选择一些随机的邻居集来与之通信。服务器只是向这些邻居发送其当前状态(在这种情况下是集群中的节点数)。使八卦协议健壮的特性是信息像病毒一样传播。

您可以扩展此方法并使用某种逻辑时钟(如Lamport时钟或vector clock)来通过对更新进行版本化来处理冲突解决方案。例如,如果节点A从版本为10的节点B接收服务器计数,并且稍后从版本为8的节点C接收计数,则节点A简单地忽略来自节点C的更新,因为其状态是在较早的逻辑上最后更新的。时间比节点B更多。这可以防止服务器过时"过时,从而提高服务器数量的一致性。通过覆盖来自更多"最新"的更新来查看群集服务器

此外,您甚至可以使用八卦协议来执行更强大的故障检测。例如,如果从群集的某些部分的视图进行网络分区,则可能看起来服务器已经死亡或者可能只是自愿离开群集。您可以使用八卦协议通过闲聊有关哪些服务器尝试联系可疑服务器的信息来从多个点探测服务器,而不是依赖于不可靠的网络。然后,只有在达到故障阈值时才认为服务器已经死亡。

相关问题