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

Мясоедов А.А.

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

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

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

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

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

Похожие статьи в разделе Прикладные информационные (компьютерные) технологии. Методы основанные на применении компьютеров

Нечеткая система управления состоянием многооперационного станка
Нечеткая система управления состоянием многооперационного станка

Тугенгольд Андрей Кириллович, Изюмов Андрей Игоревич, Волошин Роман Николаевич, Соломыкин Михаил Юрьевич

Определение оптимальных траекторий формообразующих движений при обработке резанием
Определение оптимальных траекторий формообразующих движений при обработке резанием

Заковоротный В.Л., Волошин Д.А., Долгов В.В., Лукьянов А.Д., Флек М.Б.

Представление кофейного автомата в виде модели с использованием Any Logic
Представление кофейного автомата в виде модели с использованием Any Logic

Крылов Ростислав Александрович, Сильченко Никита Сергеевич, Мигаль Павел Николаевич, Лебель Анастасия Александровна, Горбунов Александр Николаевич

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

IDS: 140311875   |   УДК: 004.9

Implementation of a Persistent State Machine Management Module Using Kotlin Exposed

This paper discusses the main aspects of implementing a state machine for entities with persistent storage. The article is devoted to the problems of using Kotlin DSL and the Exposed framework to create a state machine and interact with its storage.

Текст научной статьи Реализация модуля управления персистентной машиной состояний с помощью 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 содержится информация о переходах между статусами, можно рассматривать её как аудит лог. В данной таблице содержатся следующие колонки: идентификатор записи, идентификаторы предыдущего и нового статусов, идентификатор сущности, к которой относится переход, название события перехода и время перехода.

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