2015-03-25 31 views
4

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

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

有没有办法以分布式的方式做到这一点,而不使用中央服务器?

回答

3

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

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

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

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

此外,你甚至可以使用八卦协议来执行更强大的故障检测。例如,如果从群集某个部分的角度看网络分区,则可能会出现服务器已经死亡或者可能刚刚离开群集的情况。不要依赖不可靠的网络,您可以使用八卦协议通过闲谈关于哪些服务器尝试联系可疑服务器的信息来从多个点探测服务器。然后,只有当达到故障阈值时,服务器才会被认为是死机。

+0

谢谢。这给了一些提示.. – 2015-03-27 09:08:23