System Overview / Architecture

Архитектура системы

Общий дизайн мессенджера Chepuhagram, его компоненты и каналы взаимодействия.

Основные компоненты

Chepuhagram построен по гибридной архитектуре: управляющая сигнализация и база данных обслуживаются FastAPI бэкендом, высокоскоростной медиа-трафик звонков маршрутизируется специализированным Go SFU сервером по протоколу SCP (QUIC/UDP) или направляется напрямую через P2P Hole Punching. Все операции шифрования и дешифрования выполняются на клиенте (E2EE Zero-Knowledge).

🐍

FastAPI Backend

REST API, WebSockets, управление сессиями, авторизация звонков, интеграция с Google Drive и Firebase.

⚡

Go Media SFU (SCP)

Высокопроизводительный сервер звонков: QUIC (:4001, RFC 9221 Datagrams, TLS 1.3), UDP Relay (:4000, DSCP EF), E2EE passthrough fanout.

📱

Flutter Client & Rust Core

Кроссплатформенное приложение с E2EE, нативным Zero-Copy Pipeline (D3D11 / WinMFT / MediaCodec) и локальной БД Drift.

☁️

Google Drive

Физическое хранение зашифрованных медиафайлов через Service Account.

🔥

Firebase (FCM)

Push-уведомления о новых сообщениях и входящих звонках для фонового и офлайн режима.

Схема взаимодействия

Компоненты взаимодействуют по следующим протоколам:

ℹ️
REST API: Используется для авторизации, профилей пользователей, обмена ключами E2EE, загрузки/скачивания файлов и администрирования. Префикс: /auth, /users, /media, /admin.
🔌
WebSocket: Постоянное дуплексное соединение по пути /ws. Передает чат-сообщения, квитанции о доставке/прочтении (ACK), статус печати, сигнализацию инициализации звонков и обмен ICE-кандидатами.
⚡
SCP (Secure Call Protocol v2.1.1): Собственный протокол медиа-потоков реального времени. Включает первичный транспорт QUIC SFU (порт 4001, RFC 9221 Datagrams, TLS 1.3), резервный UDP Relay (порт 4000, DSCP EF 0xB8 QoS) и прямой P2P канал через STUN Hole Punching. Подробнее в Спецификации SCP.

Детальные сценарии работы

Для подробного изучения того, как компоненты взаимодействуют друг с другом во время регистрации, инициализации чата, отправки E2EE медиафайлов и звонков, перейдите в раздел 🛣️ Пути пользователя.