26
101 способ приготовления RabbitMQ и немного о pipeline архитектуре Павел Филонов Positive Technologies

101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

  • Upload
    ontico

  • View
    2.430

  • Download
    4

Embed Size (px)

Citation preview

Page 1: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

101 способ приготовления RabbitMQ и немного о pipeline архитектуреПавел ФилоновPositive Technologies

Page 2: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

ПрологДействующие лица: АРХИТЕКТОР, РУКОВОДИТЕЛЬ.Сцена 1.Будний день. ОфисР: Прекрасное начало дня! Нельзя найти лучшего времени для новой задачи!А: Что еще за новая задача!?Р: Было принято решение: тебе поручается разработать архитектуру для нового продукта!А: Что еще за новый продукт?!Р: Подробностей пока нет, но мы уверены, что тебе понравится!А: (произносит с сарказмом) Не сомневаюсь.

Page 3: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Завязка«Формальные требования»• Нужно будет обрабатывать

события, много и быстро.• Обрабатывать нужно по-разному,

потом расскажем, как.• События будут приходить из

разных источников.• Нужно быстро сделать прототип.• Должно работать «хорошо» и

«всюду».

Page 4: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Завязка«Формальные требования»• Нужно будет обрабатывать

события, много и быстро.• Обрабатывать нужно по-

разному, потом расскажем, как.• События будут приходить из

разных источников.• Нужно быстро сделать прототип.• Должно работать «хорошо» и

«всюду».

Page 5: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Проблема выбора

Нет на свете такой глупости, которую не придумали бы ещё древние греки!

Page 6: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Шаблоны

Многослойная Событийноориентированная

Сервисноориентированная

Конвейерная Микроядерная Пространственноориентированная

Page 7: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Шаблоны

Многослойная Событийноориентированная

Сервисноориентированная

Конвейерная Микроядерная Пространственноориентированная

Page 8: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Связующее ПО

Page 9: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Связующее ПО

Page 10: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Пользователи AMQP• The Deutsche Börse• JPMorgan• NASA• Red Hat• VMware• Google• OpenStack• Microsoft Azure Service Bus• AT&Thttps://www.amqp.org/about/examples

Page 11: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Основные элементыPublisher Exchange Queue Consumer

Binding

Gate Filter A Filter B

Filter CFilter DDB

Raw input

Page 12: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

RabbitMQ + pipeline• Асинхронная обработка

• Простое добавление

обработчиков • Гибкая маршрутизация

• Удобная отладка

Page 13: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

RabbitMQ + pipeline• Масштабируемость

читателей и писателей • Масштабируемость

брокеров • Устойчивость к

перезагрузкам и отказам

Page 14: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Шеф, у нас проблема!

Page 15: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Типы 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

Page 16: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Пакетная обработка• Apache Kafka и ZeroMQ

делают «из коробки»

• Сделать пакетную обработку самостоятельно

• Увеличиваем задержки

Page 17: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Пакетная обработка

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

Page 18: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Переполнение очередей

- интенсивность потока заявок

- интенсивность обслуживания

- коэффициент загрузки системы

Средняя длина очереди

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

Коэффициент загрузки системы

Page 19: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Переполнение очередей• Сообщения

сбрасываются из памяти на диск

• Блокируются писатели

• Всё очень замедляется

• Никто не падает

Page 20: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Переполнение очередей• Ограничиваем размер

очередей • Ограничиваем время

жизни сообщений • Используем RabbitMQ

flow control

Page 21: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Горшочек, не вари!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

Page 22: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Масштабирование

Queue A

Filter A

Filter A

Queue B

Stateless filters

Stateful filters

Queue A1

Filter A2

Filter A1

Queue B

Queue A2

Router

Page 23: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Statefull filters• Нужно хранить

состояние • Нужно делать

сегментацию • Не используйте без

веской причины!

Page 24: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

Сегментация• Делаем свой h(m) mod N

• Делаем свой consistent

hash • Используем RabbitMQ

Sharding plugin • Используем consistent-

hash-exchange

Page 25: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

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

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

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

Page 26: 101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов Павел (Positive Technologies)

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