- Описание архитектурного подхода
- Высокоуровневая диаграмма
- Компоненты системы
- Принцип работы
- Потоки данных и событий
- Преимущества Event-driven подхода
Pipegenious Orchestrator — это оркестратор ELT-пайплайнов, построенный на event-driven модели.
Оркестратор не управляет выполнением задач напрямую — он реагирует на события, формирует новые события и изменяет состояние пайплайнов.
- Orchestrator = State Machine + Event Processor
- Workers = Stateless executors
- Event Bus = единственный канал общения
- Metadata DB = источник истины
flowchart LR
UI[UI / API] --> ORCH[Orchestrator Core]
ORCH --> EB[(Event Bus)]
EB --> W1[Worker Pool]
W1 --> EB
EB --> ORCH
ORCH --> DB[(Metadata DB)]
-
Обрабатывает события из Event Bus
-
Обновляет состояние DAG и task_runs
-
Решает, какие задачи запускать следующими
-
Генерирует события task.requested, pipeline.completed
flowchart TD
subgraph Core["Application Core"]
CMD[Commands]
QRY[Queries]
SRV[Services]
MOD[Domain Models]
PRT[Ports]
end
subgraph Inbound["Inbound Adapters"]
HTTP[HTTP Controllers]
GRPC[GRPC Server]
CLI[CLI Commands]
end
subgraph Outbound["Outbound Adapters"]
BUS[Event Bus Adapter]
DB[Storage Adapter]
WK[Worker Communication]
MET[Metrics Exporter]
end
subgraph Infra["Infrastructure"]
CFG[Config]
LG[Logging]
OBS[Observability]
DI[Dependency Injection]
end
HTTP --> CMD
GRPC --> CMD
CLI --> CMD
CMD --> PRT
QRY --> PRT
SRV --> PRT
PRT --> BUS
PRT --> DB
PRT --> WK
PRT --> MET
Infra --> Inbound
Infra --> Outbound
Infra --> Core
-
Забирает задачи из event bus
-
Выполняет экстракцию, загрузку, трансформации
-
Генерирует обратные события выполнения
PostgreSQL
pipelines,
pipeline_runs,
tasks,
task_runs,
dag_nodes,
dag_edges
Принцип работы
sequenceDiagram
participant API
participant Orchestrator
participant EventBus
participant Worker
API->>Orchestrator: Запуск пайплайна
Orchestrator->>EventBus: pipeline.started
Orchestrator->>EventBus: task.requested
Worker->>EventBus: task.started
Worker->>EventBus: task.completed
EventBus->>Orchestrator: событие о завершении
Orchestrator->>EventBus: task.requested (следующая)
| Событие |
Генерирует |
Назначение |
task.requested |
Orchestrator |
Сообщить worker-ам, что задача готова |
task.started |
Worker |
Уведомление о начале |
task.completed |
Worker |
Результат выполнения |
pipeline.started |
Orchestrator |
Старт пайплайна |
pipeline.completed |
Orchestrator |
Завершение |
-
Масштабирование воркеров под нагрузку
-
Надёжность: события не теряются
-
Естественное восстановление после сбоев
-
Возможность динамического DAG
-
Нет tight-coupling между orchestrator ↔ workers