Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,064 views

Published on

Архитектурный шаблон проектирования конвейер (pipeline) хорошо зарекомендовал себя при проектировании высоконагруженных (highload) систем. Использование шины сообщений (message bus) при реализации каналов взаимодействия позволяет достигать хороших показателей масштабируемости (scalability), но при этом появляются дополнительные накладные расходы, которые сказываются на показателях производительности (performance).

В докладе обсуждаются варианты использования системы обмена сообщениями RabbitMQ в качестве связующего программного обеспечения (middleware) для построения конвейерной архитектуры. Рассматриваются вопросы производительности и масштабирования как stateless так и statefull фильтров.

В качестве примера рассматривается реализация системы обработки сложных событий (complex event processing) применительно к управлению журналированием (log management).

Published in: Engineering
  • Be the first to comment

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

  1. 1. 101 способ приготовления RabbitMQ и немного о pipeline архитектуре Павел Филонов Positive Technologies
  2. 2. Пролог Действующие лица: АРХИТЕКТОР, РУКОВОДИТЕЛЬ. Сцена 1. Будний день. Офис Р: Прекрасное начало дня! Нельзя найти лучшего времени для новой задачи! А: Что еще за новая задача!? Р: Было принято решение: тебе поручается разработать архитектуру для нового продукта! А: Что еще за новый продукт?! Р: Подробностей пока нет, но мы уверены, что тебе понравится! А: (произносит с сарказмом) Не сомневаюсь.
  3. 3. Завязка «Формальные требования» • Нужно будет обрабатывать события, много и быстро. • Обрабатывать нужно по-разному, потом расскажем, как. • События будут приходить из разных источников. • Нужно быстро сделать прототип. • Должно работать «хорошо» и «всюду».
  4. 4. Завязка «Формальные требования» • Нужно будет обрабатывать события, много и быстро. • Обрабатывать нужно по-разному, потом расскажем, как. • События будут приходить из разных источников. • Нужно быстро сделать прототип. • Должно работать «хорошо» и «всюду».
  5. 5. Проблема выбора Нет на свете такой глупости, которую не придумали бы ещё древние греки!
  6. 6. Шаблоны Многослойная Событийно ориентированная Сервисно ориентированная Конвейерная Микроядерная Пространственно ориентированная
  7. 7. Шаблоны Многослойная Событийно ориентированная Сервисно ориентированная Конвейерная Микроядерная Пространственно ориентированная
  8. 8. Связующее ПО
  9. 9. Связующее ПО
  10. 10. Пользователи AMQP • The Deutsche Börse • JPMorgan • NASA • Red Hat • VMware • Google • OpenStack • Microsoft Azure Service Bus • AT&T https://www.amqp.org/about/examples
  11. 11. Основные элементы Publisher Exchange Queue Consumer Binding Gate Filter A Filter B Filter CFilter DDB Raw input
  12. 12. RabbitMQ + pipeline • Асинхронная обработка  • Простое добавление обработчиков  • Гибкая маршрутизация  • Удобная отладка 
  13. 13. RabbitMQ + pipeline • Масштабируемость читателей и писателей  • Масштабируемость брокеров  • Устойчивость к перезагрузкам и отказам 
  14. 14. Шеф, у нас проблема!
  15. 15. Типы exchange • Fanout – 35000 mps • Direct – 35000 mps  • Topic – 10000 mps  • Consistent-Hash – 40000  Intel Xeon E5-2630L 2.4 Ghz 16 Gb RAM Ubuntu 14.04 x64 RabbitMQ 3.5.6
  16. 16. Пакетная обработка • Apache Kafka и ZeroMQ делают «из коробки»   • Сделать пакетную обработку самостоятельно   • Увеличиваем задержки 
  17. 17. Пакетная обработка 0 5000 10000 15000 20000 25000 30000 35000 40000 256 1024 4096 16384 65536 262144 1048576 Message size (bytes) bytes/sec/30000 msg/s
  18. 18. Переполнение очередей  - интенсивность потока заявок - интенсивность обслуживания - коэффициент загрузки системы     Средняя длина очереди 0 5 10 15 20 25 0.5 0.6 0.7 0.8 0.9 Коэффициент загрузки системы
  19. 19. Переполнение очередей • Сообщения сбрасываются из памяти на диск   • Блокируются писатели  • Всё очень замедляется  • Никто не падает 
  20. 20. Переполнение очередей • Ограничиваем размер очередей   • Ограничиваем время жизни сообщений   • Используем RabbitMQ flow control  
  21. 21. Горшочек, не вари! Filter A Queue B 10 000 Filter B   Filter A Queue B 10 000 000 Filter B  Filter A Queue B 10 000 000 Filter B  Time
  22. 22. Масштабирование Queue A Filter A Filter A Queue B Stateless filters Stateful filters Queue A1 Filter A2 Filter A1 Queue B Queue A2 Router
  23. 23. Statefull filters • Нужно хранить состояние  • Нужно делать сегментацию  • Не используйте без веской причины! 
  24. 24. Сегментация • Делаем свой h(m) mod N  • Делаем свой consistent hash   • Используем RabbitMQ Sharding plugin   • Используем consistent- hash-exchange  
  25. 25. В заключение • Выбирай. Но осторожно. Но выбирай. • Не бойтесь последствий вашего выбора, но справляйтесь с ними.
  26. 26. Спасибо за внимание!

×