101 способ приготовления RabbitMQ и немного о pipeline...

Preview:

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

В заключение• Выбирай. Но

осторожно. Но выбирай. • Не бойтесь

последствий вашего выбора, но справляйтесь с ними.

Спасибо за внимание!

Recommended