Стартапы, Проекты | Олег Брагинский, Марина Строева
Основатель «Школы траблшутеров» Олег Брагинский и ученица Марина Строева разберут, как устроена система уведомлений социальной сети, какие задачи решает и почему процесс разработки – всегда вызов для инженеров, который полностью обесценивают пользователи.
Уведомления стали фоновым шумом: их отключают, игнорируют, ненавидят. Но за раздражающим потоком скрывается сложная система, без которой сервис не может обеспечить мгновенную обратную связь, синхронизацию устройств и персонализированный пользовательский опыт.
Система уведомлений – не просто «пуши» или всплывающие сообщения, а целый комплекс, доставляющий информацию пользователю в реальном времени: учитывает статус прочтения, синхронизирует данные между гаджетами пользователя, оптимизирует сетевой трафик.
Каждое уведомление – текст и контекст: ссылка на пост, кнопка действия, возможность перейти к обсуждению или поздравить друга. Всё это требует продуманной архитектуры и гибкой логики.
Архитектура системы
Frontend (клиент) – веб-приложение, использующее IndexedDB для локального хранения уведомлений, WebSocket для подписки и получения сообщений, а также для отправки статусов прочтения.
Сервер уведомлений – сердце системы, отвечающее за маршрутизацию, доставку, хранение и синхронизацию статусов между устройствами. Бэкенд-сервера – генерируют уведомления на основе событий: новый лайк, комментарий, подписчик и отправляют их на сервер уведомлений.
База данных уведомлений – централизованное хранилище истории уведомлений, статусов прочтения, информации о клиентах и гаджетах. Система оркестрации и деплоя – автоматизирует развёртывание, обновление и перезапуск сервисов.
Архитектурная схема серверов
- Service Discovery & Orchestration: система обнаружения сервисов и оркестрации для управления жизненным циклом серверов
- Notification Servers: горизонтально масштабируемый пул серверов, каждый из которых обслуживает часть пользователей
- Load Balancer: принимает входящие соединения и распределяет по серверам уведомлений
- Backend Servers: отправляют уведомления на Notification Servers через API или очередь сообщений
- Database Cluster: централизованное хранилище для истории уведомлений и статусов.
Жизненный цикл уведомления
На стороне клиента полученные уведомления сохраняются в IndexedDB. При подключении к серверу синхронизируются ID полученных уведомлений. Подписка на уведомления происходит через WebSocket или SSE, клиент указывает идентификатор и список полученных уведомлений.
При прочтении уведомления клиент отправляет на сервер запрос с ID уведомления и статусом «прочитано». Если статус изменился на одном из устройств, сервер уведомлений отправляет обновление всем подключённым гаджетам пользователя.
Сервера уведомлений получают уведомления от бэкенда, определяют, на каком сервере находится пользователь, и доставляют уведомление через открытое соединение. При изменении статуса уведомления обновляют запись в БД и рассылают обновление всем активным устройствам.
Система отслеживает, на каком сервере находится пользователь, и при необходимости пересылает уведомления между серверами. Балансировка нагрузки и горизонтальное масштабирование позволяют выдерживать большие нагрузки и автоматически перераспределять пользователей.
На стороне бэкенда при возникновении события: лайк, комментарий, подписка, формируется уведомление и отправляется на сервер уведомлений. В базе данных фиксируются отправленные уведомления, статусы доставки и прочтения, а также информация о клиентских устройствах.
Распределение пользователей и отказоустойчивость
При подключении пользователя предстоит определить, на какой сервер его можно направить исходя из текущей загрузки. Если необходимо доставить уведомление, система определяет, на каком сервере находится пользователь, для маршрутизации сообщения.
В случае отключения сервера уведомлений пользователи автоматически переподключаются к другому серверу, сессии и статусы восстанавливаются.
Для запуска и поддержки, используется система оркестрации (Kubernetes), управляющая развёртыванием, масштабированием, обновлением, перезапуском сервисов. Автоматизированные CI/CD пайплайны обеспечивают быструю и безопасную доставку новых версий.
Системы мониторинга (Prometheus, Grafana) и централизованного логирования (ELK stack) позволяют отслеживать состояние сервисов и быстро реагировать на сбои.
Типы уведомлений
Основные оповещения, реализуемые в системе:
- новый пост в сообществе
- ответ на комментарий
- приглашение в группу
- новый комментарий
- упоминание в посте
- сообщение в личку
- новый подписчик
- новый лайк.
Уведомления содержат текст и функционал: быстрые действия, переходы, кнопки, что требует продуманной структуры данных и гибкой логики отображения. Получается масштабируемая, отказоустойчивая система уведомлений с оптимизацией трафика и масштабированием серверов.
Процессы, деплоя, запуска и обновления сервисов автоматизированы, что обеспечивает высокую скорость внедрения изменений и стабильную работу системы.
Уведомления – не раздражающий поп-ап, а сложная инженерная экосистема, без которой невозможна цифровая коммуникация. Именно поэтому разработка требует глубокого понимания архитектуры, распределённых систем и пользовательских сценариев.