Модель акторов
Модель акторов в информатике — это математическая модель параллельных вычислений, в которой «актор» является базовым строительным блоком.
Модель акторов позволяет разработчикам создавать надёжные системы на основе сообщений, используя акторы для коммуникации. Конечные автоматы и диаграммы состояний могут моделировать логику акторов. Эти акторы могут общаться друг с другом и с другими акторами одинаковым образом.
Совет
Когда вы запускаете конечный автомат в XState, он становится актором.
Что определяет «актора»?¶
Акторы — это независимые «живые» объекты, которые могут взаимодействовать друг с другом посредством асинхронной передачи сообщений. В XState мы называем эти сообщения событиями.
- Актор имеет собственное внутреннее, инкапсулированное состояние, которое может обновляться только самим актором. Актор может обновить своё внутреннее состояние в ответ на полученное сообщение, но оно не может быть обновлено никакой другой сущностью.
- Акторы общаются с другими акторами, отправляя и получая события асинхронно.
- Акторы обрабатывают по одному сообщению за раз. Они имеют внутренний «почтовый ящик», который действует как очередь событий, обрабатывая события последовательно.
- Внутреннее состояние актора не разделяется между акторами. Единственный способ для актора поделиться частью своего внутреннего состояния:
- Отправка событий другим акторам
- Или генерация снимков (snapshots), которые можно рассматривать как неявные события, отправляемые подписчикам.
- Акторы могут создавать (spawn/invoke) новых акторов.
Вы найдёте сильное сходство с моделью акторов в программном обеспечении, с которым вы, возможно, уже знакомы. Концепция объектов, инкапсулирующих состояние и передающих сообщения друг другу, может быть знакома из объектно-ориентированного программирования. А акторы аналогичны реальным физическим концепциям, таким как клеточная биология и коммуникация в человеческих отношениях.
Состояние¶
Актор имеет собственное внутреннее, инкапсулированное состояние, которое может обновлять только сам актор. Актор может обновить своё внутреннее состояние в ответ на полученное сообщение, но оно не может быть обновлено никакой другой сущностью. Акторы не разделяют состояние. Единственный способ для актора поделиться данными — это отправка событий.
Подробнее об акторах и состоянии в XState.
Коммуникация через события¶
Акторы общаются с другими акторами, отправляя и получая события асинхронно. Акторы используют внутренний «почтовый ящик», который действует как очередь событий, обрабатывая события по одному за раз.
Подробнее о событиях и переходах в XState.
Порождение акторов¶
Акторы могут порождать новых акторов, что полезно в ситуациях, когда актору нужно делегировать работу другому актору. Порождение позволяет создавать гибкую и динамичную систему, где акторы могут создаваться и уничтожаться по мере необходимости для эффективной обработки рабочей нагрузки.
- Подробнее о порождении акторов в XState.
- Узнайте о разнице между вызовом и порождением акторов в XState.
Модель акторов в бэкенд-разработке¶
Модель акторов часто используется для координации бэкенд-систем. Существуют прямые реализации модели акторов, такие как Akka для JVM. В Erlang процессы можно рассматривать как акторы, которые могут отправлять и получать сообщения и порождать новые процессы. Erlang используется в крупных распределённых системах, таких как Discord и WhatsApp.
В Stately Sky актор конечного автомата может использоваться для управления длительными бэкенд-процессами, такими как процессы онбординга пациентов, управление инвентарём или многопользовательский совместный опыт, например интерактивные доски или игры.
Модель акторов во фронтенд-разработке¶
Модель акторов особенно полезна для координации множества движущихся частей фронтенд веб-приложения.
Ваше фронтенд-приложение всегда является распределённой системой, и управление распределёнными системами — это то, в чём модель акторов преуспевает. Это связано с тем, что в браузерной среде у вас никогда нет настоящего «единого источника истины», вместо этого у вас есть множество независимых источников состояния и событий: сторонние компоненты, локальное состояние компонентов, локальное хранилище, параметры запроса, маршрутизаторы, сетевой ввод/вывод, события DOM и их обработчики и т.д.
[…] не существует такого понятия, как единый источник истины в любом нетривиальном приложении. Все приложения, даже фронтенд-приложения, на каком-то уровне являются распределёнными. – из: Redux is Half of a Pattern (2/2)
Так что даже для простых веб-приложений, с небольшим специфичным для приложения состоянием и несколькими известными событиями, модель акторов может быть полезна.
XState¶
Акторы в XState могут:
- Принимать сообщения как события, передаваемые в их собственную внутреннюю логику, или для конечных автоматов как получаемые через переходы.
- Создавать больше акторов внутри конечного автомата, используя
spawnвassign, или используя создатель действияspawnChild. Подробнее см. Порождение. - Отправлять больше сообщений как события, используя
self.sendв своей собственной логике, или создатели действий, такие какsendToилиraiseв конечном автомате.
Акторы в XState имеют собственную логику актора, которую они используют для:
- Принятия локальных решений
- Определения способа ответа на следующее полученное сообщение
- Изменения собственного приватного состояния (но влияют друг на друга только через обмен сообщениями)
Акторы в XState существуют в системах и могут взаимодействовать друг с другом внутри этих систем и между ними.
Ссылки¶
- Что такое модель акторов и когда её использовать?
- Модель акторов за 5 минут
- Википедия: Модель акторов