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

Sam*_*age 5 p2p distributed-system

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

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

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

kuu*_*ujo 5

如果您只需要估计系统中节点的数量,并且想要在群集中分配该数量而不是将其存储在数据库中,那么八卦协议是一种轻量级且高效的方法,可在服务器。

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

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

您可以扩展这种方法,并使用某种逻辑时钟(例如Lamport时钟或矢量时钟)通过实质上对更新进行版本控制来解决冲突。例如,如果节点A从版本为10的节点B接收到服务器计数,后来又从版本为8的节点C接收到计数,则节点A只会忽略节点C的更新,因为其状态最后一次更新是在较早的逻辑上。时间比节点B的时间长。通过防止具有群集“过期”视图的服务器覆盖来自更多“最新”服务器的更新,这可以提高服务器数量的一致性。

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