Найти тему
HowToSchool

SD-EP42: Как спроектировать инфраструктуру для чата?

Приведем дизайн упрощенной инфраструктуры (системы) для обмена сообщениями между двумя пользователями.

Процесс входа подключения пользователя (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. Как синхронизировать сообщения между разными устройствами Алисы?