Компоненты: схемы данных¶
Эта страница описывает роль схем данных в архитектуре QTasks и правила их использования при взаимодействии компонентов.
Схемы данных — это основной механизм передачи информации между компонентами. Они формируют строгий, типизированный контракт, который заменяет прямой обмен объектами и состоянием выполнения.
Роль схем в архитектуре¶
Когда данные необходимо передать от одного компонента к другому, оба компонента обязаны придерживаться согласованной схемы данных.
Схемы:
- определяют точную структуру передаваемых данных;
- фиксируют состояние задачи на каждом этапе жизненного цикла;
- позволяют сериализовать, хранить и восстанавливать данные;
- служат основой для типизации и статического анализа.
Единственное исключение из этого правила — добавление задачи в Worker через
контракт add, где данные передаются в виде параметров и преобразуются в схемы
уже на стороне Worker.
Общие правила схем¶
Для всех схем данных в QTasks действуют единые архитектурные правила.
1. Строгая структурированность¶
Каждая схема должна быть dataclass-подобной структурой с явно заданными полями и типами. Это обеспечивает:
- совместимость с
mypyи другими инструментами типизации; - предсказуемость структуры данных;
- однозначность контрактов между компонентами.
Схемы не предназначены для хранения логики и не должны содержать поведения, выходящего за рамки представления данных.
2. Сборка схем на стороне отправителя¶
Формирование схемы всегда происходит в компоненте-отправителе.
Это правило гарантирует, что принимающий компонент:
- получает уже валидированные данные;
- не зависит от деталей формирования структуры;
- может работать исключительно с контрактом.
Исключение — Worker (add), который принимает параметры задачи и самостоятельно
формирует соответствующие схемы.
3. Стабильность схем¶
Схема рассматривается как часть публичного архитектурного контракта. Изменения в схемах должны быть осознанными и совместимыми, так как они напрямую влияют на взаимодействие компонентов и плагинов.
Ключевые схемы QTasks¶
Ниже перечислены основные схемы, используемые в архитектуре QTasks, и их назначение.
QueueConfig¶
Схема конфигурации, используемая всеми компонентами, начиная с QueueTasks. Определяет
базовые параметры работы системы и передаётся при инициализации компонентов.
Task¶
Схема результата задачи, возвращаемая клиенту. Представляет агрегированное состояние задачи с учётом её текущего или конечного статуса.
BaseTaskStatusSchema¶
Базовая схема статуса задачи. Используется для представления состояния задачи на отдельных этапах выполнения.
Производные схемы:
TaskStatusNewSchema;TaskStatusProcessSchema;TaskStatusSuccessSchema;TaskStatusErrorSchema;TaskStatusCancelSchema.
Основной потребитель этих схем — компонент Storage.
TaskExecSchema¶
Схема, содержащая информацию о задаче и функции её выполнения. Используется
преимущественно Worker при подготовке задачи к исполнению и передаче в TaskExecutor.
TaskPrioritySchema¶
Схема добавления задачи в Worker. Хранит входные данные, переданные через add,
а также приоритет выполнения.
Эта схема является точкой входа задачи в очередь выполнения Worker.
BaseTaskCls¶
Схема предварительно собранной задачи, представляющая альтернативный способ создания задачи.
Производные варианты:
AsyncTaskCls;SyncTaskCls.
Такие схемы позволяют работать с задачей как с объектом вызова, а не через
прямой вызов add_task.
InitsExecSchema¶
Схема для ивентовых функций, используемых в системе событий QTasks.
Пример использования — обработчики вида:
@app.events.on.worker_running
GlobalConfigSchema¶
Основная схема компонента GlobalConfig, предназначенного для хранения и
распространения глобальных параметров.
По умолчанию реализация использует Redis как сервер хранения.
ArgMeta¶
Схема метаданных аргументов задачи.
Хранит:
- имена аргументов;
- значения;
- позицию или ключ;
- аннотации типов и вспомогательную информацию.
Используется преимущественно в TaskExecutor и плагинах, которым необходимо
понимать структуру аргументов задачи.
Для плагинов ArgMeta передаётся как параметр в соответствующих триггерах.
Архитектурные инварианты¶
- компоненты обмениваются только схемами данных;
- схемы не содержат логики выполнения;
- формирование схем происходит до передачи данных;
- стабильность схем критична для совместимости компонентов и плагинов.
Схемы данных формируют «язык» взаимодействия компонентов QTasks и обеспечивают целостность архитектуры при её расширении.