3.4 KiB
3.4 KiB
TODO: Будущие доработки
1) Полный переход на ReceiveOutcomingMessage
- Сейчас в UI используется
ReceiveOutcomingMessageс fallback наSendMessagePair. - Fallback нужен только временно для совместимости со старыми серверами.
- После обновления всех серверов:
- убрать вызов
SendMessagePairиз UI, - убрать регистрацию
SendMessagePairна сервере (оставить толькоReceiveOutcomingMessage).
2) Реальная мультисерверная доставка
- Сейчас фактически предполагается 1 сервер на пользователя.
- Нужно реализовать штатную мультисерверную схему:
- пересылка исходящих сообщений между серверами пользователя A,
- пересылка входящих сообщений между серверами пользователя B,
- дедупликация на уровне БД для затухания дублей.
3) Надёжная доставка при перезапуске сервера
- Сейчас возможен сценарий: запись уже сохранена в БД, но сервер не успел переслать дальше из-за перезапуска.
- Нужно добавить механизм «store + guaranteed forward»:
- очередь/аутбокс для межсерверной пересылки,
- фоновый ретрай до подтверждения отправки,
- корректная остановка (graceful shutdown) с дожатием критичных задач.
4) Политика идемпотентности
- Сохранить принцип: пара (
incoming,outgoing) пишется одной транзакцией, либо обе, либо ни одной. - Не допускать частичного состояния, при котором в БД есть только один блок пары.
5) Наблюдаемость и аналитика
- Добавить метрики по доставке:
- количество дублей,
- количество успешных вставок пар,
- доля доставок в WS/push,
- количество ретраев межсерверной пересылки.
6) Ограничение текущих звонков (важно)
- Сейчас звонки работают только в рамках одного сигнального сервера (или единого контура, где обе стороны уже подключены).
- Сценарий «пользователь A на своих серверах, пользователь B на других серверах» пока не поддержан.
- TODO на будущее:
- временная межсерверная авторизация/сессия для старта звонка,
- отправка сигнальных сообщений между разными серверами пользователей,
- аккуратное завершение временной сессии после установления/завершения звонка.