Chord Join DHT - 第二个节点的加入协议

Chord Join DHT - join protocol for second node

我有一个分布式散列 table (DHT),它在同一程序的多个实例上 运行,可以在多台机器上,也可以在同一台机器上的不同端口上进行测试。这些实例一个接一个地启动。首先,启动基本节点,然后其他节点加入它。

我有点困惑我应该如何实现第二个节点的连接,在不定义所有边界情况的情况下,它也可以与所有其他节点一起工作(当然所有节点都有相同的程序)。

对于要加入的节点,它首先发送一个加入消息,该消息被传递到正确的节点(这里它只是基本节点),然后用一个通知消息应答。 通过这两条消息,基本节点的前驱和现有节点的后继得到设置。但是另一个 属性 是如何设置的呢?我知道,有时节点会向其后继者发送稳定消息,后者会将其与其前任进行比较,并 returns 将其与通知消息和前任进行比较,以防它与消息的发送者不同。

现在,基节点无法发送消息,因为它不知道其后继节点,新节点可以发送一个,但前任节点已经有效。

我猜,这两个属性最终应该指向另一个节点,才能完全连接。

这是我认为应该是第三个节点加入的顺序的另一个图表。但是同样,我什么时候根据稳定消息更新属性,什么时候发回通知消息?在图中很容易看出,但在代码中很难决定。

这里的技巧是将后继者设置为与前任相同的值,如果它在收到加入消息后为 NULL。其他一切都由协议的其余部分很好地处理。