Сделать холодный make up приемлемым входом в учебный стенд: сократить время
до готовности и показывать пользователю, какой этап он ждёт.
Ручная приёмка #96 заняла 9 м 12 с. Предыдущий инструментальный прогон на той
же ветке занял 8 м 18 с. Разовая цена допустима, но почти десятиминутное
непрозрачное ожидание мешает начать лабораторную работу.
Сначала выяснить
разложить холодный запуск по этапам: сборка образов, инициализация служб,
генерация событий, отправка слепков, готовность обработчика DAG и приём заказов;
отделить обязательную работу от последовательности, которую можно безопасно
сократить или распараллелить;
согласовать бюджет холодного запуска и достаточную индикацию прогресса.
Критерии приёмки
Есть воспроизводимый замер длительности каждого крупного этапа холодного make up.
Зафиксирован целевой бюджет времени до полностью готового стенда.
Пользователь по выводу make up видит текущий этап, а не молчаливое ожидание.
Холодный запуск укладывается в согласованный бюджет на контрольной машине.
По завершении по-прежнему готовы события, стартовые заказы и пользовательские интерфейсы.
Обновлены замеры и описание цены запуска в docs/architecture/testing.md.
Границы
Не объявлять стенд готовым, пока данные стартового мира не приняты.
Не ослаблять проверки здоровья ради меньшего числа в замере.
Не добавлять постоянные наблюдатели и счётчики доставки.
Не смешивать оптимизацию запуска с изменением модели мира или данных.
Сначала прочитать
Makefile;
compose.yaml;
scripts/wait-for-world.sh;
scripts/ingest-starting-orders.sh;
docs/architecture/testing.md.
Проверка
make clean
/usr/bin/time -p make up
make smoke
make check-clickhouse
make check-services
## Цель
Сделать холодный `make up` приемлемым входом в учебный стенд: сократить время
до готовности и показывать пользователю, какой этап он ждёт.
Ручная приёмка #96 заняла 9 м 12 с. Предыдущий инструментальный прогон на той
же ветке занял 8 м 18 с. Разовая цена допустима, но почти десятиминутное
непрозрачное ожидание мешает начать лабораторную работу.
## Сначала выяснить
- разложить холодный запуск по этапам: сборка образов, инициализация служб,
генерация событий, отправка слепков, готовность обработчика DAG и приём заказов;
- отделить обязательную работу от последовательности, которую можно безопасно
сократить или распараллелить;
- согласовать бюджет холодного запуска и достаточную индикацию прогресса.
## Критерии приёмки
- [ ] Есть воспроизводимый замер длительности каждого крупного этапа холодного `make up`.
- [ ] Зафиксирован целевой бюджет времени до полностью готового стенда.
- [ ] Пользователь по выводу `make up` видит текущий этап, а не молчаливое ожидание.
- [ ] Холодный запуск укладывается в согласованный бюджет на контрольной машине.
- [ ] По завершении по-прежнему готовы события, стартовые заказы и пользовательские интерфейсы.
- [ ] Обновлены замеры и описание цены запуска в `docs/architecture/testing.md`.
## Границы
- Не объявлять стенд готовым, пока данные стартового мира не приняты.
- Не ослаблять проверки здоровья ради меньшего числа в замере.
- Не добавлять постоянные наблюдатели и счётчики доставки.
- Не смешивать оптимизацию запуска с изменением модели мира или данных.
## Сначала прочитать
- `Makefile`;
- `compose.yaml`;
- `scripts/wait-for-world.sh`;
- `scripts/ingest-starting-orders.sh`;
- `docs/architecture/testing.md`.
## Проверка
- `make clean`
- `/usr/bin/time -p make up`
- `make smoke`
- `make check-clickhouse`
- `make check-services`
ddmitry
changed title from Сократить и объяснить холодный запуск стенда to Отделить пересборку хранилища от полного сброса стенда2026-08-21 15:51:01 +03:00
ddmitry
changed title from Отделить пересборку хранилища от полного сброса стенда to Перенести жизненный цикл мира из Compose в Airflow2026-08-21 16:35:10 +03:00
ddmitry
changed title from Перенести жизненный цикл мира из Compose в Airflow to Сократить и объяснить холодный запуск стенда2026-08-21 17:48:30 +03:00
Закрываем исходную задачу без реализации. Разовый холодный запуск за 8–10 минут на контрольном старом ноутбуке допустим, если остаётся редкой операцией. Проблемой его делало частое применение make clean в обычной разработке, а не сама цена полного создания стенда.
make clean сохраняет отдельный смысл: удалить всё постоянное состояние стенда. Оптимизировать этот редкий путь ради повседневной работы не будем. Узкое пересоздание только прикладной схемы, данных мира и состояния генератора вынесено в #119; им управляет Airflow без удаления инфраструктурных томов.
Закрываем исходную задачу без реализации. Разовый холодный запуск за 8–10 минут на контрольном старом ноутбуке допустим, если остаётся редкой операцией. Проблемой его делало частое применение `make clean` в обычной разработке, а не сама цена полного создания стенда.
`make clean` сохраняет отдельный смысл: удалить всё постоянное состояние стенда. Оптимизировать этот редкий путь ради повседневной работы не будем. Узкое пересоздание только прикладной схемы, данных мира и состояния генератора вынесено в #119; им управляет Airflow без удаления инфраструктурных томов.
Сохраняю историю развилок — она пригодится в #119.
Исходно предлагалось ускорить сам полный холодный запуск и показывать прогресс. Отклонено: полный сброс редок, ускорять его — лечить не ту причину.
Дальше — адресная очистка отдельных объектов, партиций, баз. Это остаётся правилом по умолчанию при обычной разработке.
Тактический крайний вариант — make rebuild-storage в shell: удаляет только прикладные БД ClickHouse (dm, dds, ods, stg, dic), заново вызывает одноразовые Compose-службы DDL, генератора и слепков, ждёт оба источника и ставит позицию мира в 8. Живой замер: 2 м 25 с, 401 185 событий, 6656 версий заказов; позиция 11 → 8, в ODS только стартовые даты, службы и тома не пересозданы. Прототип доказал, что десять минут платить не нужно, но вскрыл дефект: старые сообщения и офсеты Kafka оставались на месте, а управление миром было размазано между Compose, shell и Airflow.
Рассматривался один разрушительный DAG — и для первого запуска, и для пересоздания. Отклонено: make up не должен разрушать существующий мир.
Принято для #119: world_initialize идемпотентен и на готовом мире не делает ничего; world_recreate ставит world_position = -1, чистит прикладные БД, топики и офсеты, ставит 0 и ждущим вызовом делегирует world_initialize. Отдельный сторож или переменная отвергнуты: состояния -1, 0 и 8+ уже выражаются через world_position. За Compose остаётся инфраструктура, Airflow получает весь жизненный цикл прикладного мира.
Shell-прототип в #119 как реализация не переносится — переносятся его замер и правило: чистить самым узким достаточным способом.
Сохраняю историю развилок — она пригодится в #119.
1. Исходно предлагалось ускорить сам полный холодный запуск и показывать прогресс. Отклонено: полный сброс редок, ускорять его — лечить не ту причину.
2. Дальше — адресная очистка отдельных объектов, партиций, баз. Это остаётся правилом по умолчанию при обычной разработке.
3. Тактический крайний вариант — `make rebuild-storage` в shell: удаляет только прикладные БД ClickHouse (`dm`, `dds`, `ods`, `stg`, `dic`), заново вызывает одноразовые Compose-службы DDL, генератора и слепков, ждёт оба источника и ставит позицию мира в 8. Живой замер: 2 м 25 с, 401 185 событий, 6656 версий заказов; позиция 11 → 8, в ODS только стартовые даты, службы и тома не пересозданы. Прототип доказал, что десять минут платить не нужно, но вскрыл дефект: старые сообщения и офсеты Kafka оставались на месте, а управление миром было размазано между Compose, shell и Airflow.
4. Рассматривался один разрушительный DAG — и для первого запуска, и для пересоздания. Отклонено: `make up` не должен разрушать существующий мир.
5. Принято для #119: `world_initialize` идемпотентен и на готовом мире не делает ничего; `world_recreate` ставит `world_position = -1`, чистит прикладные БД, топики и офсеты, ставит 0 и ждущим вызовом делегирует `world_initialize`. Отдельный сторож или переменная отвергнуты: состояния -1, 0 и 8+ уже выражаются через `world_position`. За Compose остаётся инфраструктура, Airflow получает весь жизненный цикл прикладного мира.
Shell-прототип в #119 как реализация не переносится — переносятся его замер и правило: чистить самым узким достаточным способом.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Цель
Сделать холодный
make upприемлемым входом в учебный стенд: сократить времядо готовности и показывать пользователю, какой этап он ждёт.
Ручная приёмка #96 заняла 9 м 12 с. Предыдущий инструментальный прогон на той
же ветке занял 8 м 18 с. Разовая цена допустима, но почти десятиминутное
непрозрачное ожидание мешает начать лабораторную работу.
Сначала выяснить
генерация событий, отправка слепков, готовность обработчика DAG и приём заказов;
сократить или распараллелить;
Критерии приёмки
make up.make upвидит текущий этап, а не молчаливое ожидание.docs/architecture/testing.md.Границы
Сначала прочитать
Makefile;compose.yaml;scripts/wait-for-world.sh;scripts/ingest-starting-orders.sh;docs/architecture/testing.md.Проверка
make clean/usr/bin/time -p make upmake smokemake check-clickhousemake check-servicesСократить и объяснить холодный запуск стендаto Отделить пересборку хранилища от полного сброса стендаОтделить пересборку хранилища от полного сброса стендаto Перенести жизненный цикл мира из Compose в AirflowПеренести жизненный цикл мира из Compose в Airflowto Сократить и объяснить холодный запуск стендаЗакрываем исходную задачу без реализации. Разовый холодный запуск за 8–10 минут на контрольном старом ноутбуке допустим, если остаётся редкой операцией. Проблемой его делало частое применение
make cleanв обычной разработке, а не сама цена полного создания стенда.make cleanсохраняет отдельный смысл: удалить всё постоянное состояние стенда. Оптимизировать этот редкий путь ради повседневной работы не будем. Узкое пересоздание только прикладной схемы, данных мира и состояния генератора вынесено в #119; им управляет Airflow без удаления инфраструктурных томов.Сохраняю историю развилок — она пригодится в #119.
Исходно предлагалось ускорить сам полный холодный запуск и показывать прогресс. Отклонено: полный сброс редок, ускорять его — лечить не ту причину.
Дальше — адресная очистка отдельных объектов, партиций, баз. Это остаётся правилом по умолчанию при обычной разработке.
Тактический крайний вариант —
make rebuild-storageв shell: удаляет только прикладные БД ClickHouse (dm,dds,ods,stg,dic), заново вызывает одноразовые Compose-службы DDL, генератора и слепков, ждёт оба источника и ставит позицию мира в 8. Живой замер: 2 м 25 с, 401 185 событий, 6656 версий заказов; позиция 11 → 8, в ODS только стартовые даты, службы и тома не пересозданы. Прототип доказал, что десять минут платить не нужно, но вскрыл дефект: старые сообщения и офсеты Kafka оставались на месте, а управление миром было размазано между Compose, shell и Airflow.Рассматривался один разрушительный DAG — и для первого запуска, и для пересоздания. Отклонено:
make upне должен разрушать существующий мир.Принято для #119:
world_initializeидемпотентен и на готовом мире не делает ничего;world_recreateставитworld_position = -1, чистит прикладные БД, топики и офсеты, ставит 0 и ждущим вызовом делегируетworld_initialize. Отдельный сторож или переменная отвергнуты: состояния -1, 0 и 8+ уже выражаются черезworld_position. За Compose остаётся инфраструктура, Airflow получает весь жизненный цикл прикладного мира.Shell-прототип в #119 как реализация не переносится — переносятся его замер и правило: чистить самым узким достаточным способом.