docs(glossary): четыре термина переименованы, world.md и stand.md вычитаны
- Зачем:
- справочники читает человек со стороны, а «пульт мира», «опись мира»,
«работник» и «сырьё» звучали шуткой или калькой времён разработки
(тикет #214, выбор владельца).
- Что:
- CONTEXT.md: статьи «Паспорт мира», «Даги модельного времени»,
«Шаговый даг», «Сырые данные», старые слова в строках «Избегать»;
пометки в ADR 0005, 0008, 0009 без переписывания решений.
- замены по README, справочникам, путеводителю, лабам, спекам,
комментариям дагов и SQL, тегу дага и панели Grafana; имена в коде
не тронуты.
- world.md и stand.md: 35 находок вычитки внесены, регистр выровнен.
- Проверка:
- make config-test; make lint в корне и в generator/; make test в
generator/ (437 passed); скрипт ссылок из #212 пуст; grep старых
слов вне ADR, research и CONTEXT.md пуст.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QBCtU38qSHg5DvgtnKXcW
This commit is contained in:
1 parent
86ad8afaf2
commit
59d8c83b17
54 files changed
+794
-776
No files matched your search
@@ -23,9 +23,9 @@
|
||||
заметит потерянного подключения Superset: он про ClickHouse и только.
|
||||
|
||||
Отсюда правило для новой проверки: **спроси, кого она спрашивает.** Счётчики
|
||||
против описи — вопрос к ClickHouse: строки в `ods.event` считает сам
|
||||
сервер и отвечает сразу, значит дом им в `check-clickhouse`, даже если по цене
|
||||
они подошли бы смоуку.
|
||||
против паспорта — вопрос к ClickHouse: строки в `ods.event` считает сам сервер и
|
||||
отвечает сразу, значит дом им в `check-clickhouse`, даже если по цене они
|
||||
подошли бы смоуку.
|
||||
|
||||
## Карта целей
|
||||
|
||||
@@ -44,11 +44,11 @@
|
||||
| `make config-test` | корень | Compose разбирается, файлы DAG и дашборды Grafana синтаксически целы, в diff нет пробельных ошибок. О работоспособности не говорит ничего | не нужен | 1 с |
|
||||
| `make lint` | корень | Код стенда — `dags/` и `infra/superset/` — отформатирован и проходит ruff | не нужен | 0,4 с |
|
||||
| `make smoke` | корень | Стенд **собран**: службы живы, порты отвечают, подключения настроены друг на друга. Вширь и по касательной к каждой службе. Единственная цель, которая здесь правда смоук | нужен | 25 с |
|
||||
| `make check-clickhouse` | корень | Всё, что спрашивают **у ClickHouse** и он отвечает сам: макросы, шарды, реплики, путь в keeper, ключ шардирования, очередь распределённых DDL, ответ словаря товаров, счёт событий стартового мира против описи | нужен | 24 с |
|
||||
| `make check-clickhouse` | корень | Всё, что спрашивают **у ClickHouse** и он отвечает сам: макросы, шарды, реплики, путь в keeper, ключ шардирования, очередь распределённых DDL, ответ словаря товаров, счёт событий стартового мира против паспорта | нужен | 24 с |
|
||||
| `make check-services` | корень | **Службы работают**: DAG запускается и доходит, топик создаётся и удаляется, Superset логинится и ходит в базу | нужен | 71 с |
|
||||
| `make lint` | `generator/` | Код генератора отформатирован и проходит ruff | не нужен | 0,4 с |
|
||||
| `make typecheck` | `generator/` | Типы генератора сходятся (ty) | не нужен | 0,5 с |
|
||||
| `make test` | `generator/` | Генератор делает то, что обещает; схема события остаётся объявленным контрактом, а собранные из кода [описание выгрузки](../formats/clickstream-event.md) и [опись мира](../../data/world-inventory.json) — свежими | не нужен | 176,5 с |
|
||||
| `make test` | `generator/` | Генератор делает то, что обещает; схема события остаётся объявленным контрактом, а собранные из кода [описание выгрузки](../formats/clickstream-event.md) и [паспорт мира](../../data/world-inventory.json) — свежими | не нужен | 176,5 с |
|
||||
|
||||
**Строк с именем `make lint` две, и это не опечатка.** Одноимённые цели за
|
||||
разными дверями охватывают разное: корневая не видит ни одного файла
|
||||
@@ -87,7 +87,7 @@ Airflow. В цену целей она не входит. На готовом м
|
||||
|
||||
`make rebuild-storage` тоже не проверка. Команда через Airflow удаляет
|
||||
прикладные базы ClickHouse, топики и позиции групп Kafka, заново применяет DDL,
|
||||
заливает стартовый мир и возвращает его пульт к концу стартовых дней. Службы и
|
||||
заливает стартовый мир и возвращает его позицию к концу стартовых дней. Службы и
|
||||
их тома она сохраняет, поэтому возврат к каноническим данным не требует
|
||||
холодного запуска всего стенда.
|
||||
|
||||
@@ -131,10 +131,9 @@ ClickHouse отвечает сразу.
|
||||
дорогая. Правки дагов и Superset — корневой `make lint`.
|
||||
|
||||
Двадцать секунд из ее ста семидесяти шести — пересборка восьми модельных дней
|
||||
для сверки с описью мира (20,5 с из 176,5). Дешевле хеши не сравнить: чтобы
|
||||
узнать, тот ли получается мир, его надо получить. Место выбрано по той же
|
||||
оси «кого спрашивают» — вопрос обращён к коду генератора, стенд ему не
|
||||
нужен, — и
|
||||
для сверки с паспортом мира (20,5 с из 176,5). Дешевле хеши не сравнить: чтобы
|
||||
узнать, тот ли получается мир, его надо получить. Место выбрано по той же оси
|
||||
«кого спрашивают» — вопрос обращён к коду генератора, стенд ему не нужен, — и
|
||||
краснеет проверка там, где надо: сразу после правки генератора. Не будь её,
|
||||
расхождение всплыло бы получасом позже, на поднятом стенде, где выглядит
|
||||
поломкой хранилища, а не забытой пересборкой.
|
||||
@@ -172,10 +171,10 @@ ClickHouse отвечает сразу.
|
||||
жизнь с менти, а интеграционный прогон в неё не входит; самое большее, он
|
||||
становится темой урока.
|
||||
|
||||
Довод не про цену прогона, а про данные. Вложенное остаётся: у сырья срок
|
||||
Довод не про цену прогона, а про данные. Вложенное остаётся: у сырых данных срок
|
||||
жизни трое суток, а ODS хранит всё, и события, которых мир не рождал, лягут в
|
||||
лабы менти неотличимо от настоящих — считая конверсию, он молча посчитает и
|
||||
их. Хуже явного мусора: явный видно.
|
||||
лабы менти неотличимо от настоящих — считая конверсию, он молча посчитает и их.
|
||||
Хуже явного мусора: явный видно.
|
||||
|
||||
Отсюда правило для того, что всё-таки вкладывает: **прибираться за собой.**
|
||||
Дешевле всего это выходит партицией — опыт играет модельный день за границей
|
||||
@@ -184,10 +183,10 @@ ClickHouse отвечает сразу.
|
||||
же механизм, на котором стоит переобработка дня X.
|
||||
|
||||
Что тогда стережёт цепочку постоянно — проверки на **настоящих** данных, тех,
|
||||
что стенд произвёл сам: подневный счёт событий против описи мира ловит и
|
||||
что стенд произвёл сам: подневный счёт событий против паспорта мира ловит и
|
||||
сломанный разбор (события уехали в брак — счёт разошёлся), и потерю по дороге,
|
||||
ничего при этом не вкладывая. Это единственный постоянный сторож цепочки
|
||||
Kafka → STG → ODS, и живёт он в `make check-clickhouse`.
|
||||
ничего при этом не вкладывая. Это единственный постоянный сторож цепочки Kafka →
|
||||
STG → ODS, и живёт он в `make check-clickhouse`.
|
||||
|
||||
Правило, которое такая проверка обязана выдержать и которое стоит держать в
|
||||
голове для следующей: **на растущих данных утверждать можно только про
|
||||
@@ -281,9 +280,9 @@ Kafka по той же причине спрашивают снаружи. Её
|
||||
|
||||
`make check-clickhouse` запускает отдельную глубокую проверку ClickHouse:
|
||||
описание кластера, макросы, связь с keeper, `ReplicatedMergeTree`,
|
||||
`Distributed`, очередь распределённых DDL и очистку временных таблиц. Девятая
|
||||
из десяти проверок спрашивает словарь товаров на обеих нодах. Последняя —
|
||||
подневный счёт событий против описи, о нем сказано выше.
|
||||
`Distributed`, очередь распределённых DDL и очистку временных таблиц. Девятая из
|
||||
десяти проверок спрашивает словарь товаров на обеих нодах. Последняя — подневный
|
||||
счёт событий против паспорта, о нем сказано выше.
|
||||
|
||||
## Что проверено
|
||||
|
||||
@@ -352,11 +351,11 @@ wc -c /tmp/stage7-events.jsonl /tmp/stage7-snapshot-{1,2,3,4,5,6,7}.jsonl
|
||||
time make test
|
||||
```
|
||||
|
||||
Опись пересобралась за 20,515 с. Файловый приемник записал 460 731 812 байт:
|
||||
458 478 771 байт событий и 2 253 041 байт слепков. `make test` прошел 437/0
|
||||
за 176,476 с. Прежние 71 с (7 августа, #42) выросли по двум причинам: тестов
|
||||
стало 437 против 407, и потяжелел сам мир — та же пересборка восьми дней
|
||||
стоила 13 с, теперь 20,5. Эта правка добавила один тест — проигрыш дня.
|
||||
Паспорт пересобрался за 20,515 с. Файловый приемник записал 460 731 812 байт:
|
||||
458 478 771 байт событий и 2 253 041 байт слепков. `make test` прошел 437/0 за
|
||||
176,476 с. Прежние 71 с (7 августа, #42) выросли по двум причинам: тестов стало
|
||||
437 против 407, и потяжелел сам мир — та же пересборка восьми дней стоила 13 с,
|
||||
теперь 20,5. Эта правка добавила один тест — проигрыш дня.
|
||||
|
||||
**Приемка #172 28 августа 2026 года.** Холодный `create_app()` занимал
|
||||
28,3-28,4 секунды, а чтение подключения после запуска - 0,07 секунды. Предел
|
||||
@@ -464,11 +463,11 @@ shell-версия узкой пересборки за 2 м 25 с пересо
|
||||
`make up` после `make clean` прошёл за 8 м 18 с, повтор на живом стенде — за
|
||||
3 м 35 с. Отправка семи слепков заняла около 28 секунд.
|
||||
|
||||
Прежний замер ниже — 2 м 50 с и 1 м 5 с до появления приёма заказов и пульта
|
||||
мира. Весь рост приписывать слепкам нельзя: на холодном прогоне основное время
|
||||
ушло ещё до сценариев ожидания: `airflow-init` завершился примерно на 320-й
|
||||
секунде, обработчик DAG стал здоров примерно на 458-й. Числа здесь называют
|
||||
цену нынешнего стенда, а не выносят вердикт о регрессии.
|
||||
Прежний замер ниже — 2 м 50 с и 1 м 5 с до появления приёма заказов и дагов
|
||||
модельного времени. Весь рост приписывать слепкам нельзя: на холодном прогоне
|
||||
основное время ушло ещё до сценариев ожидания: `airflow-init` завершился
|
||||
примерно на 320-й секунде, обработчик DAG стал здоров примерно на 458-й. Числа
|
||||
здесь называют цену нынешнего стенда, а не выносят вердикт о регрессии.
|
||||
|
||||
**Перезамер 19 августа 2026 года при исполнении #95.** После добавления десятой
|
||||
проверки словаря `make check-clickhouse` на чисто поднятом стенде прошёл за
|
||||
@@ -484,25 +483,25 @@ shell-версия узкой пересборки за 2 м 25 с пересо
|
||||
от файла, и ближний выигрывает.
|
||||
|
||||
**Перезамер 7 августа 2026 года при исполнении #42.** Подъём стенда с нуля
|
||||
(`make clean && make up`) — 2 м 50 с, из них 22,5 с занимает сама заливка:
|
||||
18,7 с генерация восьми дней и 3,8 с доставка 401 185 сообщений в Kafka.
|
||||
Повторный `make up` на живом стенде — 1 м 5 с: мир заливается заново, и это
|
||||
не оплошность — `WatchID` те же, повтор схлопнет `ReplacingMergeTree`.
|
||||
Смоук — 9 с, `check-clickhouse` — 8 с с новой девятой проверкой. `make test`
|
||||
вырос до 71 с: 58 с прежних тестов плюс 13 с на пересборку восьми дней для
|
||||
сверки с описью. Прежние 40 с в таблице устарели ещё до #42 — тесты добавляли
|
||||
(`make clean && make up`) — 2 м 50 с, из них 22,5 с занимает сама заливка: 18,7
|
||||
с генерация восьми дней и 3,8 с доставка 401 185 сообщений в Kafka. Повторный
|
||||
`make up` на живом стенде — 1 м 5 с: мир заливается заново, и это не оплошность
|
||||
— `WatchID` те же, повтор схлопнет `ReplacingMergeTree`. Смоук — 9 с,
|
||||
`check-clickhouse` — 8 с с новой девятой проверкой. `make test` вырос до 71 с:
|
||||
58 с прежних тестов плюс 13 с на пересборку восьми дней для сверки с паспортом.
|
||||
Прежние 40 с в таблице устарели ещё до #42 — тесты добавляли
|
||||
#41 и #43.
|
||||
|
||||
Что новая проверка **умеет краснеть**, снято двумя поломками того же дня, и
|
||||
проверялись обе ветви её диагноза. Снесли партицию `2026-06-03` в
|
||||
`ods.event_rep` — проверка покраснела, показала недостающий день и назвала
|
||||
адрес: «таблица брака пуста, события не доехали до ODS, начните с чтеца
|
||||
топика». Затем положили в сырьё заведомо негодную строку — брак появился, и
|
||||
диагноз сменился на второй, с признаком для различения: «сойдётся недостача с
|
||||
числом брака — сломан разбор, не сойдётся — брак от прежних опытов». Строки
|
||||
опыта убраны, день переигран `make generate-batch GENERATOR_DAY=2`; счёт
|
||||
вернулся к 401 185, и это заодно показало дедупликацию: повтор дня не удвоил
|
||||
счёт под `FINAL`.
|
||||
адрес: «таблица брака пуста, события не доехали до ODS, начните с чтеца топика».
|
||||
Затем положили в STG заведомо негодную строку — брак появился, и диагноз
|
||||
сменился на второй, с признаком для различения: «сойдётся недостача с числом
|
||||
брака — сломан разбор, не сойдётся — брак от прежних опытов». Строки опыта
|
||||
убраны, день переигран `make generate-batch GENERATOR_DAY=2`; счёт вернулся к
|
||||
401 185, и это заодно показало дедупликацию: повтор дня не удвоил счёт под
|
||||
`FINAL`.
|
||||
|
||||
Замеры 6 августа 2026 года, стенд поднят заранее. Время взято по `time` и
|
||||
совпадает с тем, что цель печатает сама. Оно плавает от прогона к прогону:
|
||||
|
||||
Reference in new issue
Block a user