Какие актеры должны быть постоянными?

Давайте представим типичное приложение Akka с древовидной структурой Актеров, т. е. небольшим (2-3) количеством актеров верхнего уровня, которые потенциально управляют тысячами мелких актеров в нижней части иерархии. Кажется, есть два подхода к настойчивости:

  1. Сделайте стойкими только акторов высшего уровня. Дети-актеры полагаются на своих родителей в любом восстановлении состояния и т. д.
  2. Сделайте всех детей-актеров настойчивыми. В конечном итоге мы получаем потенциально тысячи идентификаторов сохраняемости, и каждый актер может восстановить свое собственное состояние.

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

Вопрос должен быть абстрактным, но вот пример. Скажем, у нас есть актер для каждого пользователя приложения, и эти актеры имеют одного и того же родительского актера. Если мы хотим сохранить адрес электронной почты каждого пользователя и любые его обновления, мы могли бы сделать каждого пользователя-актора постоянным или мы могли бы просто сделать постоянным актор верхнего уровня.


person tonicsoft    schedule 05.03.2017    source источник


Ответы (1)


В этом случае я бы, вероятно, пошел со вторым подходом. Вы восстанавливаете события для пользовательского актера только тогда, когда он «выбран». Что делает этот подход еще более удобным, так это тот факт, что поведение пользовательского актора может меняться в зависимости от его состояния. Например. если пользователь регистрируется, вы, конечно, не хотели бы сохранять одно и то же «зарегистрированное» событие несколько раз. Или, если пользователь деактивирует свою учетную запись, вы, конечно же, не захотите, чтобы он обновлял свою электронную почту и т. д. Кроме того, все изменения сохраняются в виде последовательности событий. Так что никакой потери данных.

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

person Branislav Lazic    schedule 05.03.2017