Compare commits

...
3 Commits
Author SHA1 Message Date
ddadmin 67313bf997 chore(main): объединены локальные и удалённые изменения
- Зачем:
  - локальные уточнения документации нужно опубликовать без потери слитых изменений #96 и #109.
- Что:
  - актуальный `origin/main` объединён с двумя локальными коммитами документации.
  - сохранены уточнения применения настроек ClickHouse и границ проектирования заказов.
- Проверка:
  - `make config-test`.
  - `make lint`.
2026-08-21 11:09:49 +03:00
ddadmin 9bb044e1ce docs(orders): убран преждевременный вопрос о _load_id
- Зачем:
  - состав полей DDS определяется вместе с моделью, поэтому отдельная задача заранее не нужна.
- Что:
  - удалена задача #85 из списка открытых решений по заказам.
  - убран устаревший указатель на неё из описания приёма.
- Проверка:
  - выполнен `git diff --cached --check`.
2026-08-20 15:57:37 +03:00
ddadmin 0dcc874419 docs(clickhouse): уточнено применение настроек нод
- Зачем:
  - перезапуск мог оставить прежнее окружение и старый inode файла, а документы обещали неподдерживаемое живое применение.
- Что:
  - в README записано пересоздание нод с ожиданием их здоровья.
  - ADR 0007 отделяет решение от процедуры и очищен от устаревших обещаний.
- Проверка:
  - make config-test.
  - git diff --cached --check.
2026-08-20 15:10:13 +03:00
4 changed files with 26 additions and 20 deletions

No files matched your search

+14 -5
View File
@@ -298,12 +298,25 @@ uv run --project generator python -m clickstream_generator batch \
- `default` остаётся служебным: им ходят проверки здоровья и скрипты внутри - `default` остаётся служебным: им ходят проверки здоровья и скрипты внутри
контейнеров, но не приложения. контейнеров, но не приложения.
Решение и его доводы — в [ADR 0007](docs/adr/0007-clickhouse-access.md). Почему пользователи объявлены файлом, а ноды доверяют общему секрету, — в
[ADR 0007](docs/adr/0007-clickhouse-access.md).
Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли и Пользователи и роли объявлены в `infra/clickhouse/users.d/access.xml`. Пароли и
общий секрет нод живут в `.env` и передаются в конфигурацию через окружение; общий секрет нод живут в `.env` и передаются в конфигурацию через окружение;
Superset получает пароль `bi` тем же путём через штатную функцию настройки. Superset получает пароль `bi` тем же путём через штатную функцию настройки.
Значения для локального стенда есть в `.env.example`. Значения для локального стенда есть в `.env.example`.
Изменения значений ClickHouse в `.env` и файлов настройки серверов в
`infra/clickhouse/config.d/` и `infra/clickhouse/users.d/` применяются
пересозданием нод:
```bash
docker compose up --force-recreate --wait clickhouse-01 clickhouse-02
```
Команда возвращает управление, когда обе ноды снова здоровы; именованные тома
при этом сохраняются. `docker compose restart` оставит прежнее окружение и
может оставить старую версию отдельно смонтированного файла.
Пароли ClickHouse и интерфейсов, пароли Postgres, ключи Airflow и Superset, Пароли ClickHouse и интерфейсов, пароли Postgres, ключи Airflow и Superset,
отсутствие проверки доступа у Kafka и Prometheus — намеренно простые и явно отсутствие проверки доступа у Kafka и Prometheus — намеренно простые и явно
ненастоящие настройки локального учебного стенда. Это не пример настройки ненастоящие настройки локального учебного стенда. Это не пример настройки
@@ -335,10 +348,6 @@ Superset получает пароль `bi` тем же путём через ш
[официальным описанием автоматической настройки](https://grafana.com/docs/grafana/latest/administration/provisioning/). [официальным описанием автоматической настройки](https://grafana.com/docs/grafana/latest/administration/provisioning/).
Prometheus собирает только встроенные метрики двух серверов и keeper; внешних Prometheus собирает только встроенные метрики двух серверов и keeper; внешних
сборщиков, панелей и правил оповещения пока нет. сборщиков, панелей и правил оповещения пока нет.
После изменения `infra/clickhouse/config.d/prometheus.xml` выполните
`docker compose restart clickhouse-01 clickhouse-02`: обычный `make up` не
перезапускает уже созданные серверы и они продолжают работать со старой
конфигурацией.
Airflow закреплён на 3.3.0. Состав обязательных процессов, LocalExecutor, Airflow закреплён на 3.3.0. Состав обязательных процессов, LocalExecutor,
публичный `airflow.sdk`, API здоровья и SimpleAuthManager сверены с публичный `airflow.sdk`, API здоровья и SimpleAuthManager сверены с
+12 -13
View File
@@ -1,6 +1,6 @@
# ADR 0007. Доступ к ClickHouse: пользователи файлом, доверие нод секретом # ADR 0007. Доступ к ClickHouse: пользователи файлом, доверие нод секретом
Дата: 9 августа 2026 года. Статус: принято. Реализация — отдельным тикетом. Дата: 9 августа 2026 года. Статус: принято.
## Решение ## Решение
@@ -21,8 +21,7 @@
Роль здесь шире прав на слои: образ ClickHouse требует отдельного разрешения Роль здесь шире прав на слои: образ ClickHouse требует отдельного разрешения
на запросы `ON CLUSTER`, на чтение системных таблиц и на каждый движок на запросы `ON CLUSTER`, на чтение системных таблиц и на каждый движок
внешнего источника. Без права на системные таблицы клиент вовсе не открывает внешнего источника. Без права на системные таблицы клиент вовсе не открывает
соединение. Состав прав каждой роли — работа тикета соединение.
реализации.
Пользователи, роли и права объявлены файлами настройки сервера, а не Пользователи, роли и права объявлены файлами настройки сервера, а не
запросами SQL. Файл монтируется на обе ноды и лежит в git. Пароли живут запросами SQL. Файл монтируется на обе ноды и лежит в git. Пароли живут
@@ -79,14 +78,16 @@ DDS под ними, потому что так чаще всего и быва
в разделе «Что проверено». в разделе «Что проверено».
**Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах: **Файлы, а не SQL.** Объявленное файлом не оставляет состояния в томах:
повторный `make up` на живом стенде ничего не сдвигает, правка пароля источник истины — файл в git. Стенд считает `access.xml` и переданные через
применяется перезапуском, источник истины — файл в git. Оба варианта с SQL — `.env` значения настройкой при создании контейнера; отдельного способа
локальное хранилище доступа с `ON CLUSTER` и реплицированное в keeper — применять их на живом стенде нет, потому что уроки не меняют базовую модель
делают пользователей состоянием тома: `.env` на них больше не влияет, и доступа. Порядок применения изменений — в разделе README «Состав и доступ».
появляется расхождение того же сорта, которое README уже описывает для Оба варианта с SQL — локальное хранилище доступа с `ON CLUSTER` и
Postgres и Grafana. Цена выбора известна: объявленных файлом пользователей реплицированное в keeper — делают пользователей состоянием тома: `.env` на
нельзя менять запросами. Она принята как упрощение — сломать модель случайно них больше не влияет, и появляется расхождение того же сорта, которое README
труднее. уже описывает для Postgres и Grafana. Цена выбора известна: объявленных файлом
пользователей нельзя менять запросами. Она принята как упрощение — сломать
модель случайно труднее.
**Что ещё отвергнуто.** Оставить всё на беспарольном `default` **Что ещё отвергнуто.** Оставить всё на беспарольном `default`
— цена нулевая, но и рассказать по итогам нечего. Раздать всем пароль без — цена нулевая, но и рассказать по итогам нечего. Раздать всем пароль без
@@ -136,8 +137,6 @@ Postgres и Grafana. Цена выбора известна: объявленн
такого пользователя запросом даёт `ACCESS_STORAGE_READONLY`. такого пользователя запросом даёт `ACCESS_STORAGE_READONLY`.
- Роль, созданную через SQL, разрешено выдавать пользователю из файла — - Роль, созданную через SQL, разрешено выдавать пользователю из файла —
отдельное улучшение ClickHouse 2025 года, в 26.3 оно есть. отдельное улучшение ClickHouse 2025 года, в 26.3 оно есть.
- Настройку пользователей можно перечитать на живом стенде, в том числе на
всём кластере сразу.
- Подстановка значений из переменных окружения — общий механизм файлов - Подстановка значений из переменных окружения — общий механизм файлов
настройки ClickHouse. настройки ClickHouse.
- Весь DDL репозитория идёт через `IF NOT EXISTS` (файлы `sql/ddl/`). - Весь DDL репозитория идёт через `IF NOT EXISTS` (файлы `sql/ddl/`).
-1
View File
@@ -57,7 +57,6 @@
доли классов, стоимость доставки — калибровка при реализации; финальная доли классов, стоимость доставки — калибровка при реализации; финальная
фиксация чисел — пересборка эталонного мира, этап 7. При пересборке правки фиксация чисел — пересборка эталонного мира, этап 7. При пересборке правки
потребуют только числа, не устройство. потребуют только числа, не устройство.
- **`_load_id` выше ODS** — вместе с устройством `dds.order` (#85).
- **Контур проверок качества для расхождений** (даг DQ, `dm.dq_summary`) — - **Контур проверок качества для расхождений** (даг DQ, `dm.dq_summary`) —
остаётся в тумане карты #69; естественное место разговора — этап 4. остаётся в тумане карты #69; естественное место разговора — этап 4.
- **Каноническое чтение событий `ods.event_v`** — отдельный тикет #86, к - **Каноническое чтение событий `ods.event_v`** — отдельный тикет #86, к
-1
View File
@@ -199,4 +199,3 @@ MCP Context7 в сессии проектирования был недосту
забора, `RawBLOB`, одного чтеца и одной партиции топика. забора, `RawBLOB`, одного чтеца и одной партиции топика.
- [ADR 0010](../../adr/0010-order-versions-in-ods.md) заменяет публикацию - [ADR 0010](../../adr/0010-order-versions-in-ods.md) заменяет публикацию
слепка версионным ODS. слепка версионным ODS.
- Вопрос `_load_id` выше ODS оставлен проектированию DDS в тикете #85.