Транспорт нотификаций

Задача Транспорта нотификаций — быстро доставить сообщения всем подписчикам по любым каналам: от мобильных устройств до веб-интерфейсов или десктопного ПО.

 
RPS

нагрузка в API

 
млрд

отправок в день

 
млн

WebSocket-соединений онлайн

 
7 ТБ на 22 шардах

БД PostgreSQL для хранения подписок

Как это работает

Транспорт нотификаций отправляет конечным пользователям уведомления в реальном времени от любого сервиса Яндекса, будь то новое письмо, прибытие такси или изменение контента веб-страницы. Сервис работает по классической схеме Publish/Subscribe: приложения на самых разных платформах подписываются на топик, а бэкенды сервисов публикуют сообщения в топик.

Направления работы

Cloud Notification Service

Новый сервис нотификаций в каталоге Yandex Cloud на базе внутренней технологии. Совместим с Amazon Simple Notification Service: можно использовать готовые SDK и фреймворки.

Обеспечение доступности и отказоустойчивости

Создание алгоритмов для обработки большой нагрузки и обеспечения высокой (99,99%) надёжности сервиса.

Yplatform

Внутренний фреймворк для написания асинхронных бэкендов на C++ на базе Boost.Asio.

Эффективные решения

WebSocket-транспорт

Собственная реализация WebSocket-транспорта

Особенности

  • WebSocket-соединения суммарно потребляют порядка 4 ТБ RAM. Оптимизация заметно экономит количество железа.
  • При внештатных ситуациях все соединения могут переподключиться одновременно и создать большой всплеск нагрузки. Для защиты от перегрузок используются специальные алгоритмы (на базе Congestion Control), методы и решения.

FIFO-отправка

Транспорт нотификаций поддерживает отправку в режиме first-in-first-out.

Особенности

  • Нотификации доставляются через реплицируемую in-memory очередь заданий, реализованную с помощью алгоритма распределённого консенсуса Paxos (Multi-Paxos).
  • Очередь шардированная: 72 шарда.

Технологический стек

Работаем с широким спектром технологий и языков, чтобы быстро и эффективно решать задачи.

Boost.Asio

Предоставляет примитивы для работы с сетью и модель асинхронности.

WebSocket

Для платформ и задач, где отсутствует или не эффективен нативный транспорт.

Postgres

Позволяет надёжно хранить миллиарды подписок.

Kubernetes

Сервисы Транспорта нотификаций живут в кластере K8s.

Когда почта доставляет

Руководитель iOS-группы Яндекс Почты Ася Свириденко доказывает, что несмотря на ограничения системы, с потерями push-уведомлений можно и нужно бороться.

Как попасть в команду Транспорта нотификаций

В Транспорте нотификаций есть задачи для разных технических специалистов. Нужны как амбициозные middle-разработчики, так и опытные ведущие инженеры.

Вы также можете попробовать свои силы в формате буткемпа в Core Infrastructure.