Перейти к содержимому

Как работает ночная оркестрация

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

00:0003:0006:0009:0012:0015:0018:0021:0000:00Collect (pinned version) Reconcile timers (every 4h) Generate (queue backpressure) Publish + hub deploy Live-URL verify + stamp Publish sweep (same run) Outcome watchdog (late morning) Per contractSafety netsThe nightly window (conceptual)

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

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

Заголовок раздела «Слой 2 — страховочные сетки и есть архитектура»

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

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

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

Слой 3 — целевой дизайн, честно помеченный

Заголовок раздела «Слой 3 — целевой дизайн, честно помеченный»

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

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

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

Спеки: SPEC-108 (reconciler-first — спроектирован), SPEC-021 (планировщик прогонов — построен, простаивает), SPEC-104 (FSM прогона — спроектирован), плюс живой daily-run тулинг.