Базовая акка - поиск акторов и их состояния

Это пара очень простых вопросов, касающихся akka. Я полностью зеленый на akka, поэтому любые советы приветствуются.

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

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

Я думаю создать точно такую ​​же иерархию в akka. CountryActor ->* RegionActor ->* UserActor. CountryActor/RegionActor будет помимо того, что быть родителями, также будет иметь функциональные обязанности, такие как сбор новостных лент, расчет статистики, надзор за своими детьми и т. д.

Вопрос 1. Имеет ли смысл имитировать модель предметной области таким образом?

Вопрос 2: Должен ли я хранить атрибуты каждой сущности в действующем лице? Таким образом, данные нужно будет сохранить только один раз, а система akka также будет фактически являться базой данных в памяти.

(псевдокод)

CountryActor {
  Name,
  CountryCode,
  (children = list of RegionActors handled by akka)
}

RegionActor {
  Name,
  RegionCode,
  (children = list of UserActors handled by akka)
}

UserActor {
  UserId,
  Firstname,
  Lastname,
  Alias,
  ReceiveRegionalNews,
  ReceiveCountryNews,
  ...
}

Вопрос 3. Как эффективно искать пользователя по идентификатору пользователя? Я ожидаю, что дочерним именем UserActor будет идентификатор пользователя, но, учитывая, что у меня есть только идентификатор пользователя, мне все равно нужно найти правильную страну. и регион для выполнения getContent().findChild(userId)? Нужно ли мне хранить полную карту всех идентификаторов пользователей и ссылки на их актеров?

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

заранее спасибо


person Barsum    schedule 10.05.2017    source источник


Ответы (1)


У меня нет большого опыта в моделировании этих вещей в Akka(.Net), в частности, но я достаточно взрослый, чтобы знать, что ни одна из этих парадигм не является волшебной, и только потому, что система акторов иерархична, она не означает, что вы можете вместить все свои данные в такую ​​структуру без того, что, вероятно, называется несоответствием импеданса.

Если бы вы больше думали в том же духе...

  • UserManagerActor, осуществляющий управление дочерними объектами ваших UserActors;
  • Наряду с этим иерархия Страна/Регион, где по крайней мере Регион реализует некоторый шаблон pub-sub и хранит список своих подписчиков;
  • Когда он создан, Пользователь отправляет сообщение о подписке в соответствующий регион (или более одного, если это вас не устраивает);

...тогда все, что вам нужно делать, будет казаться намного проще?

Здесь подробнее о шаблонах проектирования, но не увлекайтесь в них!

person mwardm    schedule 13.05.2017