Об этом проекте

Spectrum представляет собой self-hosted хранилище продуктовой аналитики, разработанное как open-source альтернатива коммерческим платформам, таким как Amplitude и Mixpanel. Проект демонстрирует, как тщательно продуманная архитектура исключительно на базе PostgreSQL может обеспечивать прием событий, сессионизацию, анализ воронок, удержание когорт, атрибуцию выручки и A/B тестирование без необходимости в сторонних брокерах сообщений или фреймворках для больших данных. Система принимает необработанные события кликстрима через эндпоинт FastAPI, обрабатывает их с помощью идемпотентного ELT-конвейера, использующего пакетные заявки `FOR UPDATE SKIP LOCKED`, и вычисляет аналитические конструкции чисто на SQL — включая границы 30-минутных сессий через оконные функции и еженедельные воронки конверсии по измерениям на уровне аккаунтов. Материализованные представления предоставляют предварительно агрегированные метрики для дашбордов Grafana, а безопасность на уровне строк (row-level security) изолирует данные арендаторов. Ключевые архитектурные паттерны включают трехсхемный дизайн, разделяющий уровни staging, warehouse и analytics; факт-таблицы с ежемесячным диапазоном партиционирования и отсечением разделов (partition pruning); индексы BRIN по хронологическим меткам времени событий; очередь недоставленных сообщений (dead-letter queue) для некорректных полезных нагрузок; а также безопасное конкурентное выполнение конвейера, которое допускает одновременную работу нескольких экземпляров раннера без дублирования обработки. Проект поставляется с миграциями Alembic, экспортом метрик Prometheus, интеграционными тестами, подтверждающими точные показатели воронок и изоляцию удержания, а также скриптом бенчмарка, демонстрирующим ускорение за счет отсечения разделов. Развертывание опирается на контейнеры Podman, оркеструирующие PostgreSQL, API-сервер и Grafana, при этом одна команда `make demo` обеспечивает подготовку всего окружения, генерацию симулированной активности пользователей, запуск конвейера трансформации и запуск уровня визуализации.