Архітектура конвеєра
Цей документ описує архітектуру конвеєра, яка використовує орієнтований ациклічний граф (DAG) для оркестрації генерації артефактів. Конвеєр трансформує сирі дані дизайну у фінальні виходи для візуалізації та виробництва, з плануванням з урахуванням залежностей та ефективним кешуванням артефактів.
Основні концепції
Вузли артефактів та граф залежностей
Конвеєр використовує орієнтований ациклічний граф (DAG) для моделювання артефактів та
їхніх залежностей. Кожен артефакт представлений як ArtifactNode у
графі.
ArtifactNode
Кожен вузол містить:
- ArtifactKey: Унікальний ідентифікатор, що складається з ID та типу групи
(
workpiece,step,jobабоview) - Залежності: Список вузлів, від яких залежить цей вузол (нащадки)
- Залежні: Список вузлів, що залежать від цього вузла (предки)
Вузли не зберігають стан безпосередньо. Замість цього вони делегують читання та
запис стану до ArtifactManager, який веде реєстр усіх артефактів
та їхніх станів.
Стани вузлів
Вузли проходять через п'ять станів:
| Стан | Опис |
|---|---|
DIRTY | Артефакт потребує (пере)генерації |
PROCESSING | Завдання наразі генерує артефакт |
VALID | Артефакт готовий та актуальний |
ERROR | Генерація не вдалася |
CANCELLED | Генерацію скасовано; буде повторено, якщо все ще потрібно |
Коли вузол позначається як брудний, всі його залежні також позначаються брудними, поширюючи інвалідацію вгору по графу.
PipelineGraph
PipelineGraph будується з моделі Doc і містить:
- Один вузол для кожної пари
(WorkPiece, Step) - Один вузол для кожного Step
- Один вузол для Job
Залежності встановлюються:
- Steps залежать від вузлів пар
(WorkPiece, Step) - Job залежить від всіх Steps
DagScheduler
DagScheduler - це центральний оркестратор конвеєра. Він володіє
PipelineGraph і відповідає за:
- Побудову графа з моделі Doc
- Виявлення готових вузлів (DIRTY з усіма VALID залежностями)
- Запуск завдань через відповідні стадії конвеєра
- Відстеженн я стану через процес генерації
- Повідомлення споживачів коли артефакти готові
Планувальник працює з ID генерацій щоб відстежувати, які артефакти належать до якої версії документа, дозволяючи повторне використання дійсних артефактів між генераціями.
Ключова поведінка:
- Коли граф побудовано, планувальник синхронізує стани вузлів з менеджером артефактів щоб виявити кешовані артефакти, які можна повторно використати
- Артефакти з попередньої генерації можуть бути повторно використані, якщо вони залишаються дійсними
- Інвалідації відстежуються навіть перед перебудовою графа і повторно застосовуються після
- Планувальник делегує фактичне створення завдань стадіям, але контролює коли завдання запускаються на основі готовності залежностей
ArtifactManager
ArtifactManager слугує як кеш та єдине джерело істини
для стану артефактів. Він:
- Зберігає та отримує дескрип тори артефактів через реєстр (ключований за
ArtifactKey+ ID генерації) - Відстежує стан (
DIRTY,VALID,ERRORтощо) у записах реєстру - Керує підрахунком посилань для очищення спільної пам'яті
- Обробляє життєвий цикл (створення, утримання, звільнення, видалення)
- Надає менеджери контексту для безпечного усиновлення, завершення, обробки помилок та скасування артефактів
GenerationContext
Кожен цикл узгодження створює GenerationContext, який відстежує всі
активні завдання для цієї генерації. Він гарантує, що ресурси спільної пам'яті
залишаються дійсними, поки всі виконувані завдання для генерації не завершаться,
навіть якщо новіша генерація вже розпочалась. Коли контекст заміщено
і всі його завдання завершено, він автоматично звільняє свої ресурси.