Понимание протокола Сплетни

Я читаю документацию по кластеру akka и теперь я в разделе Сплетни. Я не понял следующее утверждение:

Членство в кластере передается с использованием протокола Gossip Protocol, где текущее состояние кластера случайно сплетничается через кластер с предпочтением членов, которые не видели последнюю версию.

Это довольно сложно представить. У меня следующий вопрос:

Вопрос: как узел узнает, какие члены не видели последнее изменение, если последнее изменение все еще сплетничается.

Я имею в виду, если узел получил уведомление, как он решает, куда его отправить? Очевидно, что отправлять его обратно не следует, так как отправитель видел последние изменения. Но как насчет других участников? Некоторые из них, возможно, уже видели состояние, и нет другого способа выяснить это, чем опросить всех этих членов. Но если мы запросим один узел, и он ответит "нет, я его еще не видел" во время запроса, кто-то может отправить ему состояние...

1 ответ

Решение

В следующем параграфе статья рассказывает об использовании векторных часов. Это говорит

Конвергенция осуществляется путем передачи набора узлов, которые видели текущую версию состояния во время сплетни.

Обратите внимание, что я никогда не видел этого раньше в протоколе сплетен, потому что он обычно сходится довольно быстро сам по себе. Я пойду искать источник, но вспомню кое-что о 1000 узлах, сходящихся примерно за 10-15 шагов, когда сплетники обмениваются информацией, а не просто толкают ее.

Другие вопросы по тегам