восстановление актера сущности akka во время сбоя узла

Модуль Akka-Cluster используется для кластеризации внутри приложения.

Если у нас есть настройка, в которой субъектный актор (у нас могут быть сотни актеров, распределенных по узлам), работающий на узле, должен получать сообщение каждую 1 минуту (с использованием таймеров/планировщика), что происходит, когда узел, на котором размещен актор выключается изящно и некрасиво

Как мы можем гарантировать, что актор сущности будет создан на другом узле автоматически. Будет ли актор сущности создан только после получения первого сообщения или актор будет создан автоматически без какой-либо логики в приложении. Также, что происходит с планировщиком актора. Может ли планировщик запускаться автоматически при переносе актора после миграции на другой узел. Обратите внимание, что на данный момент я не планировал использовать постоянство? но поможет ли это иметь постоянство для автоматического создания объектов и планирования сообщений


person bindu    schedule 15.04.2021    source источник


Ответы (1)


Если субъекты управляются с помощью сегментирования кластера, вы можете использовать запоминать сущности, чтобы автоматически сохранять сущности активными до тех пор, пока сущность не пассивирует себя. В kubernetes или аналогичных средах, где к экземпляру не подключено надежное постоянное хранилище, для этого требуется Akka Persistence.

Если не использовать сегментирование кластера, вам, вероятно, придется реализовать аналогичную функциональность с использованием постоянства.

Обратите внимание, что после повторной балансировки состояние актера сущности не восстанавливается, если только актор сущности не является постоянным каким-либо образом (например, сам по себе является источником событий с использованием Akka Persistence). Это состояние будет включать состояние таймера. Актер сущности воссоздается (чаще всего с использованием Behaviors.setup (я забыл, использует ли API Java это имя)), поэтому в зависимости от того, что актор должен сделать в ответ на это сообщение:

  • если каждая минута означает не более одного раза в минуту, то актор сущности должен просто начать планировать каждую минуту как часть своей настройки; если сбой/перебалансировка произошли через 59 секунд после последнего запланированного сообщения, будет зазор, но если сообщение приводит, например, к опросу какого-либо внешнего ресурса, зазор может, в конце концов, не иметь значения.

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

person Levi Ramsey    schedule 15.04.2021
comment
Просто чтобы добавить к этому. По умолчанию функция запоминания сущностей использует распределенные данные Akka для запоминания живых сущностей. Эта информация синхронизируется между узлами кластера, поэтому данные сохраняются после сбоя узла, но не сохраняются при сбое всего кластера. Если это то, от чего вы хотите защититься, вам нужно, как сказал @levi-ramsey, Akka Persistence запоминать объекты за пределами кластера в каком-то постоянном хранилище. - person artur; 16.04.2021
comment
И я должен уточнить, что это состояние будет включать состояние таймера, не означает, что состояние таймера будет сохраняться и восстанавливаться автоматически. - person Levi Ramsey; 17.04.2021