Архитектура Мессенджера Авито – путь одного сообщения Архитектуры, масштабируемость

Доклад принят в программу конференции
Александр Емелин
Авито

В данный момент работает ведущим инженером в Авито. Разрабатывает Мессенджер Авито. Основные языки программирования – Go и Python. Автор популярного opensource-проекта Centrifugo (https://github.com/centrifugal/centrifugo), русскоязычного курса по Python на Coursera (https://ru.coursera.org/learn/diving-in-python). Любит футбол :)

https://www.facebook.com/emelin.alexander
Тезисы

Мессенджер Авито – достаточно крупный и нагруженный проект. У нас 11 миллионов уникальных пользователей в месяц, порядка 25k RPC-запросов в секунду и 500k подключений онлайн в пике.

В докладе я расскажу о том, какой путь проходит сообщение от отправителя до получателя, о цепочке сервисов на этом пути. Поговорим о том, как мы деплоим сервисы, как храним данные в MongoDB и о некоторых любопытных паттернах очередей RabbitMQ. Обсудим протокол WebSocket и поразмышляем о необходимости HTTP-fallback'a в 2019 году. Расскажу про нашу шину realtime-нотификаций, использующую под капотом Redis. Эта шина, которую мы называем SockStream, позволяет нам без проблем держать около полумиллиона постоянных соединений, имеет задел для масштабирования на порядок, обеспечивает возможность реконнекта всех подключений в течение нескольких секунд, при этом предотвращая завал основной базы данных запросами об актуальном состоянии благодаря горячему кэшу сообщений. Также затронем тему антиспама и посмотрим на наш механизм “middleware” на пути сообщения до получателя.

Другие доклады секции Архитектуры, масштабируемость