Почему протоколу сплетен в akka нужно дважды передать свое состояние для регистрации изменения состояния?
У меня проблемы с пониманием алгоритма кластера, используемого в Akka.
В описании в протоколе сплетен akka говорится, что:
Получатель состояния сплетни или статуса сплетни может использовать версию сплетни (векторные часы), чтобы определить:
- у него есть более новая версия состояния сплетни, и в этом случае он отправляет ее обратно сплетнику
- он имеет устаревшую версию состояния, и в этом случае получатель запрашивает текущее состояние у сплетника, отправляя обратно свою версию состояния сплетни
- у него есть конфликтующие версии сплетен, и в этом случае различные версии объединяются и отправляются обратно
Шаг второй кажется пустой тратой общения, так как сплетник посылает свое состояние дважды. Один раз, когда замечено, что у него нет самой новой версии, и снова, когда получатель хочет получить самую новую версию, отправив обратно свою собственную устаревшую версию.
Я думаю, что я неправильно понимаю это, потому что мое понимание векторных часов и CFRD ограничено, и описание, данное в документации Akka, является коротким, и статья в Википедии является продвинутой. Насколько я понимаю, это то, что векторные часы являются реализацией CRDT, но это может быть неверно.
Но, в конце концов, я не понимаю, почему узлу сплетни нужно сообщать свое состояние дважды. Просьба уточнить.
Но я думаю, что я мог бы неправильно понять, как вектор Акка кластер
1 ответ
Как указано в документации, Akka реализует:
Разновидность двухтактных сплетен используется для уменьшения количества информации о сплетнях, передаваемых по кластеру. В двухтактных сплетнях отправляется дайджест, представляющий текущие версии, но не фактические значения; получатель сплетни может затем отправить обратно любые значения, для которых у него есть более новые версии, а также запросить значения, для которых у него есть устаревшие версии.
Таким образом, для упрощения в случае 2, когда получатель сообщения о сплетне видит, что у него устаревшая версия состояния кластера, он запрашивает у сплетницы последнее состояние. Таким образом, первое сообщение от сплетника получателю несет версии, второе - от сплетника получателю - фактические состояния узлов.
Надеюсь это поможет.