Перейти к содержанию

Архитектура Аналитики и BI — Архыз.CLUB

Этот документ описывает архитектуру аналитической системы, построенной на базе PostgreSQL (Supabase), Apache Superset и Grafana.

1. Общая схема

graph TD
    User[Пользователь] -->|Действия| App[Web/Mobile App]
    App -->|API| Backend[FastAPI Backend]
    Backend -->|CRUD| DB[(PostgreSQL / Supabase)]
    Backend -->|Events| SystemEvents[system_events]

    subgraph "Data Layer"
        DB
        SystemEvents
        LiveSessions[live_sessions]
    end

    subgraph "Analytics Layer"
        MatViews[Materialized Views]
        AnalyticsViews[Analytical Views]
    end

    DB --> MatViews
    SystemEvents --> MatViews
    MatViews --> AnalyticsViews

    subgraph "Visualization"
        Superset[Apache Superset]
        Grafana[Grafana]
    end

    AnalyticsViews --> Superset
    LiveSessions --> Grafana
    SystemEvents --> Grafana
    DB --> Grafana

2. Основные сущности данных

2.1. Операционные таблицы (Source of Truth)

  • users, roles — Пользователи и права.
  • hotels, room_types — Объекты размещения.
  • room_bookings — Бронирования (основной источник дохода).
  • bookings (tours), skipass_bookings, transfers_bookings — Доп. услуги.

2.2. Аналитические таблицы (Events)

  • system_events — Журнал всех событий (login, booking_created, payment_success, error).
    • event_type: тип события.
    • payload: JSONB с деталями.
    • source: источник (web, mobile, backend).
  • live_sessions — Активные сессии пользователей (для realtime).

3. Аналитические представления (SQL Views)

Для Superset создаются специальные SQL-представления, скрывающие сложность джойнов и JSON-парсинга.

3.1. analytics_daily_overview (Materialized View)

Ежедневный срез ключевых метрик. Обновляется раз в час/сутки. * date: Дата. * dau: Daily Active Users. * new_users: Количество регистраций. * total_revenue: Общая выручка. * total_bookings: Количество бронирований. * conversion_rate: Конверсия (Bookings / Sessions).

3.2. analytics_hotel_performance

Детальная статистика по отелям. * hotel_id, hotel_name. * occupancy_rate: Загрузка (%). * adr: Average Daily Rate (Средняя цена за ночь). * revpar: Revenue Per Available Room. * total_revenue: Выручка отеля.

3.3. analytics_booking_funnel

Воронка продаж на основе событий system_events. * Step 1: search * Step 2: view_hotel * Step 3: select_room * Step 4: initiate_booking * Step 5: payment_success

4. KPI и Метрики

Метрика Описание Формула Частота
DAU Активные пользователи за сутки COUNT(DISTINCT user_id) из system_events (login/active) Realtime/Daily
Revenue Выручка (подтвержденная) SUM(total_price) из room_bookings где status='confirmed' Realtime
Occupancy Загрузка отелей (Booked Nights / Available Nights) * 100% Daily
ADR Средняя цена номера Revenue / Booked Nights Daily
RevPAR Доход на доступный номер Revenue / Total Available Nights Daily

5. Интеграция с ClickHouse (Advanced)

Для обработки больших объемов исторических данных (логов событий) используется ClickHouse. * Синхронизация: Через ETL-процесс (Airbyte или custom script) данные из system_events переливаются в ClickHouse. * Прогнозирование: ClickHouse используется для обучения ML-моделей прогнозирования спроса (seasonality forecasting).

6. Безопасность (RLS)

  • Superset Service Role: Superset подключается под специальной ролью analytics_reader, имеющей доступ только к схеме analytics (или public с ограничениями).
  • RLS: Аналитические вью используют SECURITY DEFINER чтобы обойти RLS таблиц пользователей, но выдают только агрегированные данные.