Публикация Школы траблшутеров

Как разработать систему уведомлений

Время чтения: 5 мин 5 сек
16 августа 2025 г. Просмотров: 288

Стартапы, Проекты | Олег БрагинскийМарина Строева

Основатель «Школы траблшутеров» Олег Брагинский и ученица Марина Строева разберут, как устроена система уведомлений социальной сети, какие задачи решает и почему процесс разработки – всегда вызов для инженеров, который полностью обесценивают пользователи.

Уведомления стали фоновым шумом: их отключают, игнорируют, ненавидят. Но за раздражающим потоком скрывается сложная система, без которой сервис не может обеспечить мгновенную обратную связь, синхронизацию устройств и персонализированный пользовательский опыт.

Система уведомлений – не просто «пуши» или всплывающие сообщения, а целый комплекс, доставляющий информацию пользователю в реальном времени: учитывает статус прочтения, синхронизирует данные между гаджетами пользователя, оптимизирует сетевой трафик.

Каждое уведомление – текст и контекст: ссылка на пост, кнопка действия, возможность перейти к обсуждению или поздравить друга. Всё это требует продуманной архитектуры и гибкой логики.

Архитектура системы

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) позволяют отслеживать состояние сервисов и быстро реагировать на сбои.

Типы уведомлений

Основные оповещения, реализуемые в системе:

  • новый пост в сообществе
  • ответ на комментарий
  • приглашение в группу
  • новый комментарий
  • упоминание в посте
  • сообщение в личку
  • новый подписчик
  • новый лайк.

Уведомления содержат текст и функционал: быстрые действия, переходы, кнопки, что требует продуманной структуры данных и гибкой логики отображения. Получается масштабируемая, отказоустойчивая система уведомлений с оптимизацией трафика и масштабированием серверов.

Процессы, деплоя, запуска и обновления сервисов автоматизированы, что обеспечивает высокую скорость внедрения изменений и стабильную работу системы.

Уведомления – не раздражающий поп-ап, а сложная инженерная экосистема, без которой невозможна цифровая коммуникация. Именно поэтому разработка требует глубокого понимания архитектуры, распределённых систем и пользовательских сценариев.