Производительность: числовые требования и чем их замерять #30
Notifications
Due Date
No due date set.
Blocks
Depends on
#32 Собрать спеку генератора из решений развилок
ddmitry/clickstream-data-platform
#27 Модель мира: что живёт между прогонами и как устроены модельные сутки
ddmitry/clickstream-data-platform
#31 Скорость батчевой генерации в Python: подходы и порядки величин
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#30
Reference in New Issue
Block a user
Part of #26.
Вопрос
Какие числовые требования производительности зафиксировать: время пересборки эталонного мира и параметры живого потока с ускорением ×60? Чем и как замерять?
Рамка уже решена (разделы 9 и 11 мастер-спеки): рабочее решение — Python с батчевой генерацией и распараллеливанием по модельным дням; компилируемый язык — только если замеры покажут, что Python приемлемой скорости не даёт. Здесь фиксируются числа, а не слова «быстро» (критерий приёмки #14).
Хвост из решения «Модель мира» (#27): зафиксировать числом ускорение живого дня (×60 — рабочая гипотеза мастер-спеки) и длину эталонного снимка (рабочая гипотеза владельца — около недели).
Хвост из решения «Архитектура» (#29): при фиксации длины эталонного снимка числами проверить оговорку — заливка снимка при старте идёт через Kafka пакетным режимом и должна укладываться в минуты; если выходит в десятки минут, возвращаемся к прямой загрузке как осознанному backfill-компромиссу.
Резолюция (сессия 2026-08-01, владелец подтвердил):
make upи при проверках: артефакт — кэш чистой функции (#28), кэш в git не хранят. Манифест несёт паспорт мира, счётчики и хеши по дням; «пустой git diff» и «пересгенерируй день N — сравни хеш» переезжают на него без потерь, боль «каждый PR генератора тащит гигантский дифф» исчезает, каждыйmake up— живая демонстрация детерминизма. Честная потеря — страховка от платформенного бага (менти с расходящимися байтами упрётся в красный чек манифеста); смягчение — CI гоняет генерацию на amd64 и arm64. Это расхождение с разделом 8 мастер-спеки — правится тем же коммитом, что спека генератора.make up) — минуты; лаг живого дня — секунды. Автоматический порог один: полный день (50 тыс.) генерируется ≤ 30 с — расчёт ~1 с, машинный разброс ×2–5, ловится деградация на 1–2 порядка (Faker в горячем цикле, случайная квадратичность). Реализация: pytest-тест с маркеромperfи таймаутом-обрубанием на пороге; обязателен в CI, исключён из быстрой локальной петли, зовётся отдельной целью при правках горячего цикла. Остальное — наблюдаемость без порогов:make up/smoke печатают тайминги (генерация и доставка отдельно), проигрыватель логирует лаг.Отклонено с доводами:
Хвосты: в #32 — правка мастер-спеки тем же коммитом: раздел 8 (манифест вместо артефакта в git) и раздел 11 (числа вместо «зафиксировать требования»). Этапу 5 — живой день со стороны хранилища есть просто ETL-даг на расписании (~раз в 24 минуты), генератор не дорабатывается. Этапу 7 — пересборка = манифест, не артефакт; CI-генерация на amd64 и arm64. Будущим лабам — перезаливка дня X пакетным режимом проигрывателя = готовая демка идемпотентности.