Как узел узнает, какие узлы видели текущее состояние кластера?

Я читаю документацию akka и сталкиваюсь с некоторыми проблемами, связанными с тем, как они внедряют Сплетни. ( документы здесь). Та часть, которая смутила меня (подчеркнула мою):

Периодически значение по умолчанию - каждая 1 секунда, каждый узел выбирает другой случайный узел, чтобы начать раунд сплетни. Если в видимом наборе находится менее половины узлов (увидели новое состояние), то кластер сплетничает 3 раза, а не раз в секунду. Этот скорректированный интервал сплетен является способом ускорения процесса конвергенции на ранней стадии распространения после изменения состояния.

Таким образом, если раунд сплетен находится в начале (менее ½ узлов видели текущее состояние), узлы из видимого множества начинают посылать 3 сплетни в секунду вместо одного. Но если произошла конвергенция сплетен, как они узнали об этом (они продолжают посылать сплетни 3 раза в секунду). Или, может быть, конвергенция сплетничает по всему кластеру, как и любое другое "событие кластера"?

2 ответа

Решение

Как вы, возможно, знаете, конвергенция сплетен происходит, когда все узлы видны (то есть все узлы-члены находятся в видимом списке события Сплетни). Если кластер не сходится, ClusterDeamon ускоряет сплетни.

def gossipTick(): Unit = {
    gossip()
    if (isGossipSpeedupNeeded) {
      scheduler.scheduleOnce(GossipInterval / 3, self, GossipSpeedupTick)
      scheduler.scheduleOnce(GossipInterval * 2 / 3, self, GossipSpeedupTick)
    }
  }

def isGossipSpeedupNeeded: Boolean =
    (latestGossip.overview.seen.size < latestGossip.members.size / 2)

После того, как кластер сошелся, он возвращается к обычным запланированным тикам сплетен, используя настроенный интервал сплетен. Посмотрите на источник и тестовые характеристики этой функции. Надеюсь это поможет.

Как ответили на ваш другой вопрос, когда узлы сплетничают, они включают, какие другие узлы видели это обновление.

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

Узлы по сути сплетничают о значении, а затем сплетничают о том, кто видел это значение. Этот протокол на самом деле объединяет две концепции для простоты.

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