Upload
ontico
View
2.430
Download
4
Embed Size (px)
Citation preview
101 способ приготовления RabbitMQ и немного о pipeline архитектуреПавел ФилоновPositive Technologies
ПрологДействующие лица: АРХИТЕКТОР, РУКОВОДИТЕЛЬ.Сцена 1.Будний день. ОфисР: Прекрасное начало дня! Нельзя найти лучшего времени для новой задачи!А: Что еще за новая задача!?Р: Было принято решение: тебе поручается разработать архитектуру для нового продукта!А: Что еще за новый продукт?!Р: Подробностей пока нет, но мы уверены, что тебе понравится!А: (произносит с сарказмом) Не сомневаюсь.
Завязка«Формальные требования»• Нужно будет обрабатывать
события, много и быстро.• Обрабатывать нужно по-разному,
потом расскажем, как.• События будут приходить из
разных источников.• Нужно быстро сделать прототип.• Должно работать «хорошо» и
«всюду».
Завязка«Формальные требования»• Нужно будет обрабатывать
события, много и быстро.• Обрабатывать нужно по-
разному, потом расскажем, как.• События будут приходить из
разных источников.• Нужно быстро сделать прототип.• Должно работать «хорошо» и
«всюду».
Проблема выбора
Нет на свете такой глупости, которую не придумали бы ещё древние греки!
Шаблоны
Многослойная Событийноориентированная
Сервисноориентированная
Конвейерная Микроядерная Пространственноориентированная
Шаблоны
Многослойная Событийноориентированная
Сервисноориентированная
Конвейерная Микроядерная Пространственноориентированная
Связующее ПО
Связующее ПО
Пользователи AMQP• The Deutsche Börse• JPMorgan• NASA• Red Hat• VMware• Google• OpenStack• Microsoft Azure Service Bus• AT&Thttps://www.amqp.org/about/examples
Основные элементыPublisher Exchange Queue Consumer
Binding
Gate Filter A Filter B
Filter CFilter DDB
Raw input
RabbitMQ + pipeline• Асинхронная обработка
• Простое добавление
обработчиков • Гибкая маршрутизация
• Удобная отладка
RabbitMQ + pipeline• Масштабируемость
читателей и писателей • Масштабируемость
брокеров • Устойчивость к
перезагрузкам и отказам
Шеф, у нас проблема!
Типы exchange• Fanout – 35000 mps• Direct – 35000 mps • Topic – 10000 mps • Consistent-Hash – 40000
Intel Xeon E5-2630L 2.4 Ghz 16 Gb RAMUbuntu 14.04 x64 RabbitMQ 3.5.6
Пакетная обработка• Apache Kafka и ZeroMQ
делают «из коробки»
• Сделать пакетную обработку самостоятельно
• Увеличиваем задержки
Пакетная обработка
256512
10242048
40968192
1638432768
65536
131072
262144
524288
10485760
5000
10000
15000
20000
25000
30000
35000
40000
Message size (bytes)
bytes/sec/30000
msg/s
Переполнение очередей
- интенсивность потока заявок
- интенсивность обслуживания
- коэффициент загрузки системы
Средняя длина очереди
0.50.52
0.540.56
0.58 0.60.62
0.640.66
0.68 0.70.72
0.740.76
0.78 0.80.82
0.840.86
0.88
0.900000000000001
0.920000000000001
0.940000000000001
0.9600000000000010
5
10
15
20
25
Коэффициент загрузки системы
Переполнение очередей• Сообщения
сбрасываются из памяти на диск
• Блокируются писатели
• Всё очень замедляется
• Никто не падает
Переполнение очередей• Ограничиваем размер
очередей • Ограничиваем время
жизни сообщений • Используем RabbitMQ
flow control
Горшочек, не вари!Filter A
Queue B10 000 Filter B
Filter A Queue B10 000 000
Filter B
Filter A Queue B10 000 000
Filter B
Tim
e
Масштабирование
Queue A
Filter A
Filter A
Queue B
Stateless filters
Stateful filters
Queue A1
Filter A2
Filter A1
Queue B
Queue A2
Router
Statefull filters• Нужно хранить
состояние • Нужно делать
сегментацию • Не используйте без
веской причины!
Сегментация• Делаем свой h(m) mod N
• Делаем свой consistent
hash • Используем RabbitMQ
Sharding plugin • Используем consistent-
hash-exchange
В заключение• Выбирай. Но
осторожно. Но выбирай. • Не бойтесь
последствий вашего выбора, но справляйтесь с ними.
Спасибо за внимание!