Почему протоколу сплетен в akka нужно дважды передать свое состояние для регистрации изменения состояния?

У меня проблемы с пониманием алгоритма кластера, используемого в Akka.

В описании в протоколе сплетен akka говорится, что:

Получатель состояния сплетни или статуса сплетни может использовать версию сплетни (векторные часы), чтобы определить:

  1. у него есть более новая версия состояния сплетни, и в этом случае он отправляет ее обратно сплетнику
  2. он имеет устаревшую версию состояния, и в этом случае получатель запрашивает текущее состояние у сплетника, отправляя обратно свою версию состояния сплетни
  3. у него есть конфликтующие версии сплетен, и в этом случае различные версии объединяются и отправляются обратно

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

Я думаю, что я неправильно понимаю это, потому что мое понимание векторных часов и CFRD ограничено, и описание, данное в документации Akka, является коротким, и статья в Википедии является продвинутой. Насколько я понимаю, это то, что векторные часы являются реализацией CRDT, но это может быть неверно.

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

Но я думаю, что я мог бы неправильно понять, как вектор Акка кластер

1 ответ

Как указано в документации, Akka реализует:

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

Таким образом, для упрощения в случае 2, когда получатель сообщения о сплетне видит, что у него устаревшая версия состояния кластера, он запрашивает у сплетницы последнее состояние. Таким образом, первое сообщение от сплетника получателю несет версии, второе - от сплетника получателю - фактические состояния узлов.

Надеюсь это поможет.

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