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.

Использование асинхронной очереди сообщений в высоконагруженном проекте / Андрей Федоровский (Mamba)

782 views

Published on

  • Be the first to comment

  • Be the first to like this

Использование асинхронной очереди сообщений в высоконагруженном проекте / Андрей Федоровский (Mamba)

  1. 1. Асинхронная обработкаданных: RabbitMQ, CometАндрей Федоровский
  2. 2. Задачи для асинхронной работы• Интерактивный интерфейс, подписка на события• Взаимодействие со внешними, неподконтрольными сервисами• Медленный процессинг заданий
  3. 3. Comet• Браузер открывает соединение к серверу*• Для клиента создается личный канал• Клиент подписывается на него и на общие каналы, например, счетчикколичества людей онлайн• Пользователю приходит сообщение – PHP через Comet сервер отправляетего в сокет клиента.* Единое для всех вкладок и окон. Подробности здесь:Highload++ 2012, Г.Арестов. «Использование Comet для создания интерактивных интерфейсов»
  4. 4. Gearman• Деградировала производительность с ростом длины очереди• Клиент странно работал с резервирующими серверами• Очередь в памяти + внешний сторадж: Mysql или Tokyo Cabinet*• Ну и просто медленно работал* Highload++ 2012, Д. Ананьев. «Практические вопросы использования NoSQL в высоконагруженном проекте»
  5. 5. И снова Comet• 70.000 сообщений в секунду на ядро (тест, 200 байт/сообщение)• 600.000 очередей (прямо сейчас в продакшне)• Собственная разработка – проще развивать
  6. 6. И снова Comet• 70.000 сообщений в секунду на ядро (тест, 200 байт/сообщение)• 600.000 очередей (прямо сейчас в продакшне)• Собственная разработка – проще развиватьНО• Нет гарантии доставки• Нет надежного хранилища очередей• Нет защиты от падений• Из распределенной архитектуры – только шардинг
  7. 7. Что есть на рынке• ActiveMQ – Java, JMS• Kafka – спроектирована под логи, держит малое число очередей• RabbitMQ – Erlang, AMPQ 0.9• zeroMQ – голая платформа
  8. 8. RabbitMQ• Publisher• Exchange• Queue• Consumer• Binding
  9. 9. RabbitMQ: гарантии доставки• Confirm: брокер сообщает отправителю, что сообщение успешнопоставлено в очередь• Ack[nowledge]: получатель сообщает брокеру, что сообщение обработанологикой приложения. Приложение также может явно отправить NACK.• Durable queue / persistent messages: произошел fsync очереди / сообщенияна диск. По умолчанию – периодически.• Транзакции: fsync происходит гарантированно, но это сильно замедляет.• AMQP heartbeat.
  10. 10. RabbitMQ: несколько серверов• Clustering – единый виртуальный брокер. На серверах одинаковоеПО, находиться должны рядом. Сообщения передаются средствами Erlang.– Зеркалирование очередей по всем нодам кластера.Если падает мастер – из слейвов выбирается новый.• Federation – форвардинг сообщений между разными exchange средствамиAMQP. ПО может быть различным, сервера могут быть разнесены.
  11. 11. RabbitMQ в Мамбе• Кластер из 2 нод с полным зеркалированием очередей.• Durable queues• Вместо AMQP heartbeat сделали TCP keepalive• Слейв в 3.0.4, похоже, слегка течет. Ждем фикса.• Prefetch 1 сообщения• Отдельная очередь для NACK, иначе во время аварии все тормозит.• 3 consumer сервера для разбора сообщений в 32 потока.
  12. 12. RabbitMQ в Мамбе
  13. 13. Процессинг сообщения• Сабмит сообщения на сайте, оно приходит на фронтенд• Проверки пользовательских настроек запрета доставки сообщений• Проверка на спам• Сохранение сообщения в шарде отправителя• Сохранение сообщения в шарде получателя• Генерация уведомлений: email, sms, comet и т.п.
  14. 14. Процессинг с RabbitMQ• Сабмит сообщения на сайте, оно приходит на фронтенд• Проверки пользовательских настроек запрета доставки сообщений• Проверка на спам• Сохранение сообщения в шарде отправителя• Сохранение сообщения в шарде получателя• Генерация уведомлений: email, sms, comet и т.п.
  15. 15. Спасибо за внимание!Андрей Федоровскийfedorovsky@mamba.ru

×