---
title: Как работает ночная оркестрация
description: Что реально гоняет флот каждую ночь — намеренно скучный батч-скрипт со слоями страховочных сеток — и reconciler-first дизайн, к которому он сходится.
locale: ru
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/ru/how-it-works/orchestration/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

**Проблема:** «оркестрация» приглашает к оверинжинирингу. Честный ответ
этой платформы сегодня — намеренно скучный: батч-скрипт по таймеру с
явными пинами и слоями страховочных сеток — плюс задокументированный
целевой дизайн (долговечный интент + реконсиляция), в который он может
вырасти. Эта страница описывает оба и прямо говорит, где что.

## Слой 1 — настоящее: ночной батч

```mermaid
gantt
    dateFormat HH:mm
    axisFormat %H:%M
    title The nightly window (conceptual)
    section Per contract
    Collect (pinned version) :a, 00:00, 45m
    Generate (queue backpressure) :b, after a, 90m
    Publish + hub deploy :c, after b, 30m
    Live-URL verify + stamp :d, after c, 10m
    section Safety nets
    Publish sweep (same run) :e, after d, 15m
    Reconcile timers (every 4h) :f, 00:00, 24h
    Outcome watchdog (late morning) :g, 11:00, 10m
```

Плановый таймер запускает обычный батч-скрипт, который обходит активные
контракты: Collect (явно запиненная версия) → генерация под гейтом
backpressure по глубине очереди → публикация → деплой хаба → верификация
живого URL → штамп. Ни демона, ни workflow-движка — аудируемый скрипт,
каждая фаза которого оставляет записи.

## Слой 2 — страховочные сетки и есть архитектура

Интересный дизайн не в счастливом пути, а в сетках под ним:

- **Publish sweep** — в конце того же прогона всё сгенерённое, но ещё не
  опубликованное получает второй шанс немедленно.
- **Reconcile-таймеры** — две независимые регулярные джобы (publish- и
  collect-сторона) перегоняют застрявшую работу каждые несколько часов;
  остатки упавшего прогона не ждут завтра.
- **Outcome watchdog** — поздним утром отдельный таймер проверяет, что
  ночь *вообще произвела исход* —
  [доктрина «ноль — это провал»](../observability-alerting/) в применении
  к целой ночи.
- **Самолечение уровня прогона** — вачдог и рипер
  [движка прогонов](../run-engine/) разбирают застрявшие прогоны и
  брошенные джобы слоем ниже.

Избыточность здесь намеренная: каждая сетка ловит класс отказов, который
не видят остальные.

## Слой 3 — целевой дизайн (статус: спроектировано, не построено)

Задокументированное следующее поколение — **reconciler-first**: день
каждого контракта становится долговечной записью-*циклом* (интент), и
единый цикл непрерывно сравнивает интент с наблюдаемыми фактами, делая по
одному идемпотентному шагу за раз, — паттерн, который заменил бы
рассыпанные сетки одним движком сходимости, добавил бы настоящий
admission-гейт и provider-aware брейкер сабмита. **Статус: спроектировано,
не построено.** Хранимой записи-*цикла* (интента) ещё нет — API-домен
`cycles`, показывающий воронку каждой ночи, выводит её постфактум из записей
прогонов и публикаций; текущий admission-контроль — это собственный
backpressure батч-скрипта; универсальный крон-планировщик
одиночных прогонов реализован, но в проде не включён. Страница изменится,
когда изменится это.

## Компромиссы

Батч-скрипт одноформен: контракты бегут фиксированным узором, а рулёжка
на середине прогона ограничена (бегущий пайплайн добегает, а не
останавливается на полушаге; см. [движок прогонов](../run-engine/#компромиссы)). Слоёные сетки означают, что логика восстановления
живёт в нескольких местах — ровно та дисперсия, которую reconciler-дизайн
хочет сколлапсировать. Платформа осознанно выкатила скучную версию первой
и меряет, где реально болит; дизайн-док существует потому, что замеры
теперь есть.

## Пощупать за две минуты

API-домен `cycles` показывает воронку каждой ночи — dispatched,
completed, failed, recovered — вся эта страница в числах.
