19
Асинхронная обработка данных: RabbitMQ, Comet Андрей Федоровский

Асинхронная обработка данных: RabbitMQ, Comet

  • Upload
    -

  • View
    2.566

  • Download
    13

Embed Size (px)

DESCRIPTION

РИТ-2013: Доклад о решениях по асинхронной обработке данных, внедреннных в Мамбе. 1) собственный Comet-сервер, 2) Неудачное внедрение Gearman, 3) RabbitMQ: основы работы, тонкости и особенности внедрения.

Citation preview

Page 1: Асинхронная обработка данных: RabbitMQ, Comet

Асинхронная обработка данных: RabbitMQ, Comet

Андрей Федоровский

Page 2: Асинхронная обработка данных: RabbitMQ, Comet

Задачи для асинхронной работы

• Интерактивный интерфейс, подписка на события

• Взаимодействие со внешними, неподконтрольными сервисами

• Медленный процессинг заданий

Page 3: Асинхронная обработка данных: RabbitMQ, Comet

Comet• Браузер открывает соединение к серверу*

• Для клиента создается личный канал

• Клиент подписывается на него и на общие каналы, например, счетчик количества людей онлайн

• Пользователю приходит сообщение – PHP через Comet сервер отправляет его в сокет клиента.

* Единое для всех вкладок и окон. Подробности здесь:

Highload++ 2012, Г.Арестов. «Использование Comet для создания интерактивных интерфейсов»

Page 4: Асинхронная обработка данных: RabbitMQ, Comet

Comet сервер

• 4 http-front

• 1 брокер

• 1 хаб

Page 5: Асинхронная обработка данных: RabbitMQ, Comet

Gearman

• Деградировала производительность с ростом длины очереди

• Клиент странно работал с резервирующими серверами

• Очередь в памяти + внешний сторадж: Mysql или Tokyo Cabinet*

• Ну и просто медленно работал

* Highload++ 2012, Д. Ананьев. «Практические вопросы использования NoSQL в высоконагруженном проекте»

Page 6: Асинхронная обработка данных: RabbitMQ, Comet
Page 7: Асинхронная обработка данных: RabbitMQ, Comet

И снова Comet• 50.000 сообщений в секунду на ядро (тест, 200 байт/сообщение)

• 600.000 очередей (прямо сейчас в продакшне)

• Собственная разработка – проще развивать

• Превосходный параллелизм

Page 8: Асинхронная обработка данных: RabbitMQ, Comet

И снова Comet• 50.000 сообщений в секунду на ядро (тест, 200 байт/сообщение)

• 600.000 очередей (прямо сейчас в продакшне)

• Собственная разработка – проще развивать

• Превосходный параллелизм

НО

• Нет гарантии доставки

• Нет надежного хранилища очередей

• Нет защиты от падений

• Не тестировали на длинных очередях

Page 9: Асинхронная обработка данных: RabbitMQ, Comet

Требования

• Гарантия доставки сообщения

• Сохранность сообщений при авариях разного вида

• Распределенность: параллелизуемость, устойчивость

• Клиентские библиотеки для php, c++

• Скорость работы: 1-10 тысяч сообщений на 1 ядро

Page 10: Асинхронная обработка данных: RabbitMQ, Comet

Что есть на рынке

• ActiveMQ – Java, JMS

• Kafka – спроектирована под логи, держит малое число очередей

• RabbitMQ – Erlang, AMPQ 0.9

• ZeroMQ – голая платформа

Page 11: Асинхронная обработка данных: RabbitMQ, Comet

RabbitMQ

• Publisher

• Exchange

• Queue

• Consumer

• Binding

Page 12: Асинхронная обработка данных: RabbitMQ, Comet

RabbitMQ: гарантии доставки • Confirm: брокер сообщает отправителю, что сообщение успешно

поставлено в очередь

• Ack[nowledge]: получатель сообщает брокеру, что сообщение обработано логикой приложения. Приложение также может явно отправить NACK.

• Durable queue / persistent messages: произошел fsync очереди / сообщения на диск. По умолчанию – периодически.

• Транзакции: fsync происходит гарантированно, но это сильно замедляет.

• AMQP heartbeat.

Page 13: Асинхронная обработка данных: RabbitMQ, Comet

RabbitMQ: несколько серверов

• Clustering – единый виртуальный брокер. На серверах одинаковое ПО, находиться должны рядом. Сообщения передаются средствами Erlang.– Зеркалирование очередей по всем нодам кластера.

Если падает мастер – из слейвов выбирается новый.

• Federation – форвардинг сообщений между разными exchange средствами AMQP. ПО может быть различным, сервера могут быть разнесены.

Page 14: Асинхронная обработка данных: RabbitMQ, Comet

RabbitMQ в Мамбе• Кластер из 2 нод с полным зеркалированием очередей (haall)

• Durable queues

• Вместо AMQP heartbeat сделали TCP keepalive

• Слейв в 3.0.4 слегка течет. Ждем фикса.

• Prefetch 1 сообщения

• Отдельная очередь для NACK, иначе во время аварии все тормозит.

• 3 consumer сервера для разбора сообщений в 32 потока.

Page 15: Асинхронная обработка данных: RabbitMQ, Comet

RabbitMQ в Мамбе

Page 16: Асинхронная обработка данных: RabbitMQ, Comet

Процессинг сообщения• Сабмит сообщения на сайте, оно приходит на фронтенд

• Проверки пользовательских настроек запрета доставки сообщений

• Проверка на спам

• Сохранение сообщения в шарде отправителя

• Сохранение сообщения в шарде получателя

• Генерация уведомлений: email, sms, comet и т.п.

Page 17: Асинхронная обработка данных: RabbitMQ, Comet

Процессинг с RabbitMQ• Сабмит сообщения на сайте, оно приходит на фронтенд

• Проверки пользовательских настроек запрета доставки сообщений

• Проверка на спам

• Сохранение сообщения в шарде отправителя

• Сохранение сообщения в шарде получателя

• Генерация уведомлений: email, sms, comet и т.п.

Page 18: Асинхронная обработка данных: RabbitMQ, Comet

Итого, асинхронные решенияМежду клиентом и сервером

• Realtime уведомления клиента о событиях для него

• Очень большое число клиентских соединений

• Малая длина очередей

• Ненадежное хранилище

Comet сервер

Между сервисами

• Отложенная обработка событий

• Фиксированное малое число коннектов

• Очень длинные очереди

• Гарантии доставки, надежный сторадж

RabbitMQ

Page 19: Асинхронная обработка данных: RabbitMQ, Comet

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

Андрей Федоровский

[email protected]