RabbitMQ
Яркин Сергей
системный администратор, ЯГК
разработчик Платформы СБИС, Тензор
http://www.rabbitmq.com
PF Square Sans Pro Regular
PF Square Sans Pro Medium
PF Square Sans Pro Bold
PF Square Sans Pro Italic
PF Square Sans Pro Italic Medium
PF Square Sans Pro Italic Bold
CMYK: 0 60 100 0
CMYK: 100 65 35 20
Blend
20-50% 0%
What is RabbitMQ?
Robust messaging for applications
Easy to use
Runs on all major operating systems
Supports a huge number of developer platforms
Open source and commercially supported
2
Структура решения на Erlang
3
Erlang/OTP
RabbitMQ + plugins
…
host 1 host N
hardware
operating system
BEAM
hardware
operating system
BEAM
CPU

cores
Взаимодействие объектов в AMQP
4
Exchange
Queue
Exchange
BindingPublisher
Connection
Channel
Consumer
Queue
Queue
fanout
direct
topic
durable
transient
RabbitMQClient
E2E
AMQP сообщение
5
Message Payload
Headers
Delivery Mode
Content Type
Routing Key
Timestamp
…
Properties
Name1 -> Value1
Name2 -> Value2
Name3 -> Value3
Обменники из коробки
6
Q1
Q2
Q3
P
FANOUT
binding
message path
Обменники из коробки
7
DIRECT
Q1
Q2
Q3
P
routing key
Key1 bind=Key1
bind=Key1
bind=Key2
binding
message path
Обменники из коробки
8
TOPIC
Q1
Q2
Q3
P
routing key
log.error bind=log.*
bind=*.warn
bind=#.error
binding
message path
1 any token
≧0 any tokens
*
#
Некоторые расширения протокола
Confirms
Direct reply-to
Exchange to Exchange Bindings
Time-To-Live
Queue Length Limit
9
Некоторые плагины
Management plugin
Federation
Shovel
Web STOMP
Tracing
Event Exchange
10
11
1
2
3
4
5
Позитивные моменты
Простой в понимании и настройке
Кластеризация из коробки
Гибкая маршрутизация сообщений
Хорошая скорость работы и использование ресурсов
Поддержка зеркалированных очередей
Расширяемость с помощью системы плагинов
Поддержка из коробки протоколов AMQP, STOMP, MQTT
Оперативная поддержка в сообществе
12
Негативные моменты
Непредсказуемость потребления памяти
Непредсказуемость поведения при проблемах в кластере
Ограниченная масштабируемость при работе с persistent-
сообщениями (40K MPS)
13
Примеры использования
в Платформе СБИС
Кейсы использования в компании «Тензор»
Асинхронные вызовы методов
События
Между бизнес-логиками
До клиентов
15
Зарождение системы уведомлений
16
Кластер RabbitMQ
Web STOMP для подключения веб-
пользователей
Обменник на каждый тип события
50 тысяч одновременных подключений
Зарождение системы уведомлений
17
fanout
online.sbis.ru:<event-name1>
Cluster
Q
Qfanout
online.sbis.ru:<event-name2>
fanout
online.sbis.ru:<event-nameN>
…
…
Binding churn
Второе поколение
18
Кластер RabbitMQ для публикации
Одиночные узлы (web) для для

обслуживания подключений

пользователей
Federation для связи уровней
Персональный обменник пользователя
Области публикации уведомления
300 тысяч одновременных подключений
Web
Cluster
Второе поколение
19
direct
online.sbis.ru.user
direct
online.sbis.ru.client
direct
online.sbis.ru.global
direct
direct
direct
Cluster Web
fanout
online.sbis.ru:<uid>
Q
Q
Q
Federation
Q
Federation
Q
Federation
user-id
client-id
online.sbis.ru.user
online.sbis.ru.client
online.sbis.ru.global
Второе поколение
20
direct
online.sbis.ru.user
direct
online.sbis.ru.client
direct
online.sbis.ru.global
direct
direct
direct
Cluster Web
fanout
online.sbis.ru:<uid>
Q
Q
Q
Federation
Q
Federation
Q
Federation
user-id
client-id
online.sbis.ru.user
online.sbis.ru.client
online.sbis.ru.global
Копятся неиспользуемые ресурсы
Затратная синхронизация очереди federation плагина
Много подключений между уровнями
———
———
———
———
———
———
———
———
———
———
Третье поколение
21
Shovel для связи уровней
Собственный тип для персонального

обменника пользователя c TTL
Единая точка публикации, свой тип

обменника
600 тысяч одновременных подключений
Web
Cluster
Третье поколение
22
fanout
entrypoint
direct
direct
direct
Cluster Web
sibs-
user
Q
Q
Q
Shovel
user-id
client-id
sbis-ep
entrypoint
online.sbis.ru.user
online.sbis.ru.client
online.sbis.ru.global
online.sbis.ru:<uid>
+TTL
Третье поколение
23
Web
Cluster
Ограниченная скорость публикации

из-за зеркалирования
Повышенная нагрузка при публикации

в большой чат
Четвёртое поколение
24
Кластер разбит на независимые узлы

маршрутизации
Web узлы скомпонованы в группы

с лидером
Пользователи привязаны к группам
Пакетная публикация сообщений
Web
group
Route
Четвёртое поколение
25
fanout
entrypoint
Route Web
sibs-
user
online.sbis.ru:<uid>
Q
Q
Q
Shovel sbis-ep
entrypoint sibs-
user
online.sbis.ru:<uid>
Q
Q
……
WHERE
[sites] AND [users]
Четвёртое поколение
26
1 миллион одновременных подключений
330 тыс исходящих сообщений в секунду
2 Гбит/с исходящего сетевого трафика
Вопросы?
Яркин Сергей sega@yark.in

Сергей Яркин, Тензор — RabbitMQ. Насколько ценен мех и вкусно мясо?