2.4 KiB
2.4 KiB
3. Драйверы и NFR
Корректность и воспроизводимость
- Детерминированная раздача варианта через SHA-256 hash по
subject_idиexperiment_id. - Один активный эксперимент на флаг (
running/paused) через DB constraint. - Строгие переходы lifecycle и блокировка недопустимых переходов.
- Идемпотентность событий по
event_id.
Safety
- Guardrails с порогом, окном наблюдения и автоматическим действием (
pauseилиrollback). - Ограничение участия пользователя: max concurrent + cooldown.
- Conflict domains для детерминированного разрешения коллизий экспериментов.
Целостность аналитики
- Атрибуция через
decision_id. - Для событий с
requires_exposure=True: без exposure событие уходит вPendingEventи промотируется позже. - Отчёт строится по вариантам и выбранным метрикам эксперимента.
Эксплуатация
- Health/readiness probes.
- Prometheus-инструментация HTTP и бизнес-счётчиков.
- Structured logging с correlation id.
- Регламентные фоновые задачи Celery.
Производительность
Реализовано:
- кэш флагов и активных экспериментов;
- кэш результата
decide(TTL черезDECISION_RESULT_CACHE_TTL_SECONDS); - режим записи
Decision:sync|async|disabled(DECISION_WRITE_MODE) с принудительным sync дляexperiment_assigned; - async persistence через
events.persist_decision; reportsсчитаетaverageчерезAvg,percentileчерез DB aggregate (PERCENTILE_CONTдля PostgreSQL);- в
reportsубрана materializationdecision_ids, используетсяSubquery.
Текущие ограничения:
- в режиме
asyncустойчивость записи зависит от здоровья Celery worker/broker; - SQL-ветка percentile зависит от СУБД (PostgreSQL/не-PostgreSQL fallback);