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

More Related Content

What's hot

«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
OSSDEV-2015: ReOpenLDAP
OSSDEV-2015: ReOpenLDAPOSSDEV-2015: ReOpenLDAP
OSSDEV-2015: ReOpenLDAPLeonid Yuriev
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Ontico
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)Pavel Sokolov
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Fuenteovejuna
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQAlexander Svetkin
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks ServerLevon Avakyan
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Tanya Denisyuk
 
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...Fwdays
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...Yehor Herasymchuk
 
Технологии и подходы в разработке высоконагруженных приложений
Технологии и подходы в разработке высоконагруженных приложенийТехнологии и подходы в разработке высоконагруженных приложений
Технологии и подходы в разработке высоконагруженных приложенийOlga Lavrentieva
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Ontico
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинFuenteovejuna
 

What's hot (19)

«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
OSSDEV-2015: ReOpenLDAP
OSSDEV-2015: ReOpenLDAPOSSDEV-2015: ReOpenLDAP
OSSDEV-2015: ReOpenLDAP
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)Tuning Azure Service Bus (RU)
Tuning Azure Service Bus (RU)
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...
Yevgen Lysenko "Practical experience of using AWS Lambda in a high-loaded PHP...
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
 
Технологии и подходы в разработке высоконагруженных приложений
Технологии и подходы в разработке высоконагруженных приложенийТехнологии и подходы в разработке высоконагруженных приложений
Технологии и подходы в разработке высоконагруженных приложений
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
 

Viewers also liked

101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
 
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Ontico
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...Ontico
 

Viewers also liked (7)

101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
 

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

Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийАлександр Ежов
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"railsclub
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)Ontico
 
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...HLL
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Ontico
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныSergey Xek
 
Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Ontico
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Ontico
 
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияТарасов Константин
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Ontico
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 

Similar to Асинхронная обработка данных: RabbitMQ, Comet (20)

Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
 
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использования
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 

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

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