Real-time мессенджер с видеозвонками в Azure
- Звонки
- WebRTC
- Гарантия доставки
- Outbox
- Облако
- Azure
Задача
Сделать полноценный мессенджер: личные и групповые чаты, вложения, онлайн-статусы, аудио- и видеозвонки и модерация — с развёртыванием в облаке.
Решение
.NET 10 по Clean Architecture и CQRS, SignalR для сообщений и сигнализации звонков, WebRTC для звонков, outbox для надёжной доставки; клиент на Angular 21; инфраструктура в Azure.
Архитектура
Backend разделён на слои Domain, Application, Infrastructure и WebAPI; каждая операция — команда или запрос MediatR. Сообщения отправляются через REST с ключом идемпотентности и доставляются получателям через SignalR — переподключение не теряет и не дублирует сообщения. Доменные события записываются в outbox-таблицу и публикуются фоновым диспетчером.
Онлайн-статусы и комнаты групповых звонков хранятся в Redis. Личные и групповые звонки работают на WebRTC: хаб передаёт только сигнализацию, медиа идёт напрямую между участниками. В продакшене хаб работает через Azure SignalR Service, поэтому App Service не держит долгих соединений.
Авторизация — Microsoft Entra External ID (OIDC, JWT) с ролевой админ-панелью: суперадмин может блокировать аккаунты и модерировать контент. Аватары и вложения хранятся в Azure Blob Storage, секреты — в Key Vault, телеметрия уходит в Application Insights через OpenTelemetry.
