Реализация модуля управления персистентной машиной состояний с помощью Kotlin Exposed

Автор: Мясоедов А.А.

Журнал: Форум молодых ученых @forum-nauka

Статья в выпуске: 5 (105), 2025 года.

Бесплатный доступ

В данной работе рассмотрены основные аспекты реализации машины состояний для сущностей с персистентным хранилищем. Статья посвящена проблемам использования Kotlin DSL и фреймворка Exposed для создания машины состояний и взаимодействия с её хранилищем.

Машина состояний, конечный автомат, переход, персистентность

Короткий адрес: https://sciup.org/140311875

IDR: 140311875

Текст научной статьи Реализация модуля управления персистентной машиной состояний с помощью Kotlin Exposed

В современной мире в информационных системах есть критически важная задача – управление состоянием данных. Это особенно важно в процессах, где требуется отслеживать жизненный цикл объектов, например документов. Машина состояний позволяет формализовать переходы между состояниями, обеспечивая предсказуемость и надежность системы. Однако в реальных приложениях состояния должны сохраняться между сеансами работы, что требует их персистентности.

Целью данной работы является создание модуля для управления персистентной машиной состояния. Для реализации был выбран язык программирования Kotlin [1] и фреймворк для работы с базами данных Exposed, так как они имеют отличную совместимость с JVM экосистемой и Exposed упрощает взаимодействие с SQL-базами данных, предоставляя DSL для запросов.

Перед разработкой был проведён анализ существующих решений:

  • -    Akka Persistence. Мощное решение, которое отлично подходит для распределённых систем и задач, требующих масштабирования, но в то же время имеет высокий порог вхождения и сложность эксплуатации;

  • -    Camunda [2]. Camunda это платформа для автоматизации бизнес-процессов (BPM, Business Process Management) и управления workflow с открытым исходным кодом. Она позволяет проектировать, выполнять, мониторить и оптимизировать бизнес-процессы с помощью BPMN 2.0. К минусам данного решения можно отнести сложность настройки и избыточность функциональности;

  • -    Самописные реализации на основе Event Sourcing. Данные решения часто требуют больших трудозатрат и плохо переиспользуемы.

Было решено реализовать модуль машины состояний на Kotlin Exposed [3], который соответствует следующим требованиям:

  • -    Поддержка транзакционности;

  • -    Легковесность и простота интеграции.

На рисунке 1 представлена диаграмма развертывания модуля.

Рис. 1 – Диаграмма развёртывания модуля машины состояний.

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

Рис. 2 – ER-диаграмма сущностей машины состояний.

В таблице States содержится история статусов сущностей идентификатор записи, идентификатор сущности, имя статуса, время перехода в этот статус. В таблице Transitions содержится информация о переходах между статусами, можно рассматривать её как аудит лог. В данной таблице содержатся следующие колонки: идентификатор записи, идентификаторы предыдущего и нового статусов, идентификатор сущности, к которой относится переход, название события перехода и время перехода.

Разработанный модуль может использоваться в информационных системах, где требуется персистентное управление состояниями объектов. В будущем возможно расширение функциональности с помощью добавления асинхронных операций.

Статья научная