Архитектура QTasks¶
Этот раздел описывает архитектурные принципы QTasks: как устроен фреймворк на уровне компонентов, потоков выполнения и передачи данных. Здесь не рассматриваются пользовательские возможности, API или примеры использования — фокус сделан исключительно на внутреннем устройстве и инженерных решениях.
QTasks спроектирован как компонентный task‑framework, в котором каждый элемент выполняет строго ограниченную роль и взаимодействует с другими элементами через формализованные контракты данных. Архитектура ориентирована на расширяемость, предсказуемость поведения и возможность замены любого компонента без переписывания системы целиком.
Для кого предназначен этот раздел¶
Раздел «Архитектура» ориентирован на разработчиков, которые:
- встраивают QTasks в сложные проекты;
- разрабатывают собственные компоненты или плагины;
- анализируют производительность и потоки выполнения;
- принимают архитектурные решения на уровне системы.
Понимание этого раздела не является обязательным для повседневного использования QTasks, но становится критически важным при глубокой интеграции и расширении фреймворка.
Базовая философия архитектуры¶
В основе QTasks лежит принцип минимализма компонентов. Компонент реализует только собственную ответственность и не содержит логики, относящейся к другим уровням системы. За счёт этого достигается:
- слабая связность между частями системы;
- возможность независимой замены брокера, воркера, хранилища и вспомогательных компонентов;
- предсказуемый жизненный цикл задач;
- упрощённое тестирование и отладка.
Архитектура не строится вокруг конкретного транспорта, хранилища или способа выполнения. Эти детали вынесены за пределы ядра и подключаются через реализации абстрактных интерфейсов.
Компонентная модель¶
QTasks состоит из набора логически независимых компонентов, которые образуют конвейер обработки задач. Компоненты не вызывают друг друга напрямую и не обмениваются бизнес‑объектами. Все взаимодействия происходят через схемы данных и чётко определённые точки входа.
Такой подход позволяет рассматривать систему как набор изолированных узлов, связанных потоками данных, а не как монолитный процесс с разделяемым состоянием.
Потоки управления и данных¶
В архитектуре QTasks различаются два типа потоков:
- поток управления — определяет порядок выполнения этапов обработки задачи;
- поток данных — описывает, какие структуры данных передаются между компонентами и в каком виде.
Задача на каждом этапе представлена не функцией и не объектом Python, а схемой данных, пригодной для сериализации, логирования, хранения и передачи между процессами или узлами.
Асинхронность и параллелизм рассматриваются как свойства конкретных компонентов и их окружения, а не как глобальное состояние всей системы.
Границы ответственности¶
Каждый компонент QTasks имеет чётко очерченную зону ответственности. Компоненты не знают о внутренних деталях реализации друг друга и опираются только на публичные контракты.
Это правило намеренно ограничивает «ум» компонентов, но делает систему устойчивой к росту сложности и появлению новых сценариев использования.
Расширение без изменения контрактов¶
В QTasks нет «ядра» как отдельного монолита, который нужно расширять. Система состоит из компонентов, связанных контрактами — абстрактными классами и схемами данных.
Расширение достигается двумя базовыми путями:
- замена реализации компонента при сохранении его контракта (например, иной транспорт, иная модель хранения, иной исполнитель);
- добавление новых компонентов или механизмов расширения, которые подключаются к существующим потокам, не ломая уже заданные контракты.
Ключевой принцип здесь — эволюция системы через контракты: пока контракт стабилен, внутренности компонента можно менять свободно, а экосистема вокруг остаётся совместимой.