42 lines
3.4 KiB
Markdown
42 lines
3.4 KiB
Markdown
# 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 на будущее:
|
||
- временная межсерверная авторизация/сессия для старта звонка,
|
||
- отправка сигнальных сообщений между разными серверами пользователей,
|
||
- аккуратное завершение временной сессии после установления/завершения звонка.
|