Сообщения

Архитектурные принципы модуля переписки
Раздел «Сообщения» построен на гибридной архитектуре: клиент-серверное взаимодействие через WebSocket (протокол RFC 6455) для real-time обмена, с резервированием через Long Polling в условиях нестабильного соединения. Для хранения истории диалогов используется кластер PostgreSQL 17 с расширением pgvector для семантического поиска по контексту бесед. Кэш-слой реализован на Redis 7.4 с персистентностью RDB (дельта-снапшоты каждые 5 минут).
Отличия от стандартных чатов в соцсетях
- Протокол маршрутизации: В отличие от децентрализованных моделей (Matrix, XMPP), наш модуль использует централизованный сервер очередей RabbitMQ с подтверждением доставки (publisher confirms), что гарантирует at-least-once семантику для всех входящих, а отправитель получает подтверждение о прочтении только после записи в постоянное хранилище.
- Схема хранения: Вместо единой таблицы «Сообщения» с меткой отправителя (как в Telegram), данные разделяются на три слоя: «Текущие диалоги» (InnoDB с TTL 30 дней), «Архив» (Parquet-файлы в MinIO) и «Индекс контекста» (Elasticsearch для полнотекстового поиска по переписке).
- Политика конфиденциальности: Сквозное шифрование (E2EE) на базе протокола Signal (как у WhatsApp), но с дополнительной опцией «доверенного устройства» — метаданные о времени отправки шифруются отдельным ключом от серверов приложения.
Материалы и спецификации разработки
- Backend: Rust (Tokio async runtime) — версия 1.79, обработка WebSocket через библиотеку tokio-tungstenite. Потоковая обработка пакетов данных до 10 000 RPS на один инстанс.
- Frontend: Web-сборка (WASM) на Rust через Yew 0.21, с отрисовкой через WebGL для анимаций «печатает» и «просмотрено» — снижение нагрузки на CPU на 40% относительно React.
- Спецификации пакета: Каждое сообщение — JSON с полями: uuid (v7), dialog_id (UUID v5 от пары user_id), payload (зашифрованный base64url), iv (initialization vector, 16 байт AES-256-GCM).
- Сертификация: Модуль прошел аудит SOC 2 Type II (критерии безопасности и доступности) и FIPS 140-2 (криптоядро для шифрования на стороне клиента через Web Crypto API).
Стандарты качества и тестирование
Процесс разработки соответствует ISO 25010 (Software Quality). Ключевые метрики модуля «Сообщения»:
- Задержка доставки (P99) — не более 120 мс при сетевом RTT 50 мс по измерениям Synthetic Monitoring в 23 дата-центрах.
- Гарантия доставки — 99,999% (пять девяток) для сообщений, прошедших квитирование на уровне приложения (ACK от клиента).
- Восстановление после сбоя — откат транзакции за O(100 мс) при выходе из строя ноды RabbitMQ.
Сравнение с альтернативными подходами
- Polling (HTTP 1.1): Устаревший метод с задержкой 3-5 секунд, модуль использует его только как fallback для браузеров без поддержки WebSocket (менее 0.5% аудитории).
- Firebase Realtime Database: В отличие от облачного решения Google, наш модуль не привязан к конкретному провайдеру (on-premises или VPC), обеспечивая полный контроль над данными при нагрузке > 1 млн пользователей.
- Децентрализованные мессенджеры (Matrix): Требуют установки серверов «домашней» инфраструктуры (Homeserver), что увеличивает TCO на 70% для небольших сообществ; наша платформа использует shared-nothing архитектуру с сегментированной базой.
Инструментарий изготовления
Сборка завершает цикл деплоя через GitLab CI (stage: integration) с обязательным прохождением нагрузочного теста (wrk2, 2000 одновременных соединений с пульсирующим трафиком). Контейнеризация — Docker 26 с мультиархитектурными сборками (amd64, arm64) для серверов ARM Graviton. Для метрик используется Prometheus Operator + Grafana с дашбордами по задержкам и пропускной способности каналов.
Добавлено: 11.05.2026
