Приведем дизайн упрощенной инфраструктуры (системы) для обмена сообщениями между двумя пользователями.
Процесс входа подключения пользователя (Login Flow)
Шаг 1: Алиса входит в приложение чата и устанавливает соединение c серовером через веб-сокет.
Шаги 2–4: Служба присутствия (Online Presence) получает уведомление, обновляет информацию и уведомляет друзей Алисы о ее присутствии.
Поток обмена сообщениями (Messaging Flow)
Шаги 1–2: Алиса отправляет сообщение в чат Диме. Сообщение чата направляется в службу чата (Chat Service).
Шаги 3–4. Сообщение отправляется в службу секвенирования (Sequencing & Persistence), которая генерирует уникальный идентификатор и помещает сообщение в хранилище сообщений.
Шаг 5: Сообщение отправляется в очередь синхронизации сообщений (Message Sync) для синхронизации со службой чата Димы (Службы чата разбиваются по регионам и используются только те, которые ближе к отправителю и соответственно к получателю).
Шаг 6: Перед пересылкой сообщения служба синхронизации сообщений проверяет присутствие Димы: если Димы находится в сети, сообщение отправляется в службу чата ближайшего к Диме, если Дима не в сети, сообщение отправляется на сервер push-уведомлений для дальнейшего уведомления устройства Димы.
Шаги 7-8: Если Дима находится в сети, сообщение отправляется через веб-сокет.
P.S. Как синхронизировать сообщения между разными устройствами Алисы?