SlideShare a Scribd company logo
1 of 28
Download to read offline
И снова об очередях
Илья Чесноков
UK2 Group
Генерация уменьшенных картинок
● Клиент загружает изображения и уведомляет клиент об
успехе
● Сервер генерирует уменьшенные копии и раскладывает их
в нужные папки
● Заходящие пользователи видят предпросмотр для картинок
«Бонусы» при покупке сервисов
● К домену прилагается N «стандартных» почтовых ящиков
– клиент создает их сам при необходимости
● При покупке хостинга квота на ящик увеличивается
● Нужно обойти все созданные ранее ящики и увеличить им квоту
– это долго
– не относится напрямую к покупке хостинга
● Чтобы дать клиенту воспользовать хостингом как можно быстрее:
– создаем только хостинг и уведомляем об успехе
– задачу по изменению квоты почтовых ящиков передаем другому процессу
Очередь задач (сообщений)
● Передача сообщения от одного процесса другому
(возможно, находящемуся на другом сервере)
● Задачи обычно хранятся недолго
● Процедуры «положить» и «взять» задачу из очереди
должны выполняться быстро
● Простота расширения и конфигурации
● Надежность систем передачи и хранения
Реализации
● Hand-made
● Свободные реализации
● Hosted solutions (Amazon SQS, IronMQ, Azure AMQP service
bus, etc)
Свободные решения
● Queue::DBI — бэкенды, поддерживаемые DBI
● Minion — поддержка разных бэкендов (SQL, MongoDB,
файлы, write your own!)
● Resque, Queue::Q — Redis backend
● ZeroMQ — собственный бэкенд и протокол
● RabbitMQ (и десятки других) — протокол AMQP
AMQP
● Разработка начата в 2003г. John O'Hara из JPMorgan Chase Bank
● Цель: создать свободную реализацию протокола обмена сообщениями,
который можно использовать в критически важных банковских задачах
● Определяет как формат передачи данных, так и поведение клиентского и
серверного ПО
● Имеет множество реализаций на разных языках:
– OpenAMQ
– RabbitMQ
– Apache Qpid
– Red Hat Enterprise MRG
Сообщения
● Содержат некоторые данные
– заголовок, содержащий набор свойств сообщения
– тело — содержимое сообщения, бинарные данные
● Могут храниться постоянно или временно
– постоянные хранятся на диске и восстанавливаются после
рестарта системы
● Могут иметь разный приоритет
– поэтому очередь сообщений называют «слабой очередью»
Поставщики и потребители сообщений
● Поставщик отправляет сообщения в обменник
– может ждать или не ждать подтверждения получения
●
Потребитель может:
– просто «слушать» определенную очередь
– создавать или уничтожать очереди
– определять правила заполнения очередей
– выбирать разные обменники, полностью меняя маршрутизацию сообщений
внутри системы
– указывать, сколько сообщений он может обработать (QoS)
– подтверждать обработку сообщения или отказывать в его обработке
Очередь сообщений (Message Queue)
● Именованный FIFO буфер, хранящий сообщения по запросу
приложения-потребителя
● Хранит сообщения в памяти или на диске и доставляет их к
одному или нескольким потребителям
– одно сообщение из очереди может получить только один потребитель
● Свойства:
– частные или общие
– постоянные, временные, автоматически удаляемые
– созданные клиентом или сервером
Обменник (Exchange)
● Получает сообщения от поставщика (producer)
● Направляет их в очередь(и) или в другой обменник в
соответствии с заданными критериями и параметрами сообщений:
– заголовки сообщения
● routing_key
– содержимое
● Может отправить одно сообщение в несколько очередей
● Как и очередь, может быть постоянным, временным,
автоматически удаляемым
Direct exchange
● Очередь «привязывается» к обменнику по ключу K
● Поставщик отправляет сообщение с ключом R
● Сообщение передается в очередь если K == R
● По умолчанию, все сообщения привязаны к безымянному
обменнику, использующему имя очереди как routing_key
Fanout exchange
● Очередь привязывается к обменнику без аргументов
● Поставщик отправляет сообщение в обменник
● Сообщение передается в очередь сообщений безо всяких
условий (то есть сообщение передается во все очереди,
привязанные к обменнику)
Topic exchange
● Очередь привязывается к обменнику с шаблоном
маршрутизации P
– шаблон: 0 или более слов ([A-Za-z0-9]+), разделенных точками
– * матчится с целым словом
– # - 0 или более слов
● Поставщик отправляет сообщение с ключом R
● Сообщение передается в очередь, если R соответствует P
Headers exchange
● При привязке очереди к обменнику передается таблица
аргументов с заголовками, которые должно иметь
сообщение для попадания в эту очередь (и опционально их
значения). routing_key не используется.
● Поставщик отправляет сообщение с заголовками,
содержащими таблицу имен и значений.
● Если заголовки сообщения совпадают с требуемыми, оно
попадает в очередь.
Perl-модули
● Net::AMQP (искать на search.cpan.org)
● AnyEvent::RabbitMQ
● Net::RabbitFoot
● Net::RabbitMQ
Logging system
● Отправитель шлет сообщения, где routing_key имеет вид:
<facility>.<severity>
● Получатели принимают только нужные им сообщения (от
нужных приложений либо с нужной «важностью») и
выполняют некоторые действия, например:
– отображают на экране
– сохраняют на диск
– шлют по e-mail
# producer.pl
use Net::RabbitFoot;
my $connection = Net::RabbitFoot new load_xml_spec→ → →
­>connect(%connect_arg);
my $channel = $connection­>open_channel();
$channel­>declare_exchange(exchange => 'topic_logs',
type => 'topic');
# Routing key: <facility>.<severity>
my $routing_key = shift || 'anonymous.info';
my $message     = shift || 'Hello, World!';
$channel­>publish(
    exchange    => 'topic_logs',
    routing_key => $routing_key,
    body        => $message,
);
say "Send $routing_key:$message";
$connection­>close;
# consumer.pl
use Net::RabbitFoot;
my $connection = Net::RabbitFoot­>new­>load_xml_spec
­>connect(%connect_arg);
my $channel = $connection­>open_channel();
$channel­>declare_exchange(exchange => 'topic_logs',
    type => 'topic');
my $result = $channel­>declare_queue(exclusive => 1);
my $queue_name = $result­>method_frame­>{queue};
for my $binding_key (@ARGV) {
    $channel­>bind_queue(
        exchange    => 'topic_logs',
        queue       => $queue_name,
        routing_key => $binding_key
    );
}
# ...
# consumer.pl
$channel­>consume(
    on_consume => sub {
        my $var = shift;
        my $routing_key = $var­>{deliver}­>method_frame
­>{routing_key};
        my $payload     = $var­>{body}­>{payload};
        say "$routing_key: $payload";
    },
    no_ack => 1,
);
AnyEvent­>condvar­>recv;
● ./consumer.pl *.error
● system.error: System error
occured
● player.error: Player could
not play
● ./consumer.pl player.info
● player.info: Player is
playing Counter-Strike
● ./consumer.pl '#'
● system.error: System error occured
● player.error: Player could not play
● player.info: Player is playing
Counter-Strike
Использование
● ./producer.pl system.error "System error occured"
● ./producer.pl player.error "Player could not play
● ./producer.pl player.info "Player is playing Counter-Strike"
Деплой
● Самое трудное — убедить всех, что это нужно
● Непривычно, что все приходится создавать программно
– не забывать писать тесты для архитектуры
Документация
● Спецификация AMQP (0.9.1 — для RabbitMQ)
● www.rabbitmq.com
● https://metacpan.org
● www.rubyamqp.info
● www.rubybunny.info
?
Спасибо!

More Related Content

What's hot

Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Fuenteovejuna
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Ontico
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSYandex
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQAlexander Svetkin
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014Andrey Korshikov
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTPRoman Brovko
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
Cloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаCloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаЕлена Кузовкина
 

What's hot (18)

Perl и SPDY
Perl и SPDYPerl и SPDY
Perl и SPDY
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
 
QuickMe.Mail bank.pdf
QuickMe.Mail bank.pdfQuickMe.Mail bank.pdf
QuickMe.Mail bank.pdf
 
презентация Quick me mail for site
презентация Quick me mail for siteпрезентация Quick me mail for site
презентация Quick me mail for site
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Cloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаCloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почта
 

Viewers also liked

Router гэж юу вэ ?
Router гэж юу вэ ?Router гэж юу вэ ?
Router гэж юу вэ ?Ochiroo Dorj
 
The Impact of Messaging Standards on Event-Driven Architecture and IoT
The Impact of Messaging Standards on Event-Driven Architecture and IoTThe Impact of Messaging Standards on Event-Driven Architecture and IoT
The Impact of Messaging Standards on Event-Driven Architecture and IoTSolace
 
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Badoo Development
 
Customer Service Powerpoint
Customer Service PowerpointCustomer Service Powerpoint
Customer Service Powerpointguestf74142
 
Customer Service PowerPoint PPT Content Modern Sample
Customer Service PowerPoint PPT Content Modern SampleCustomer Service PowerPoint PPT Content Modern Sample
Customer Service PowerPoint PPT Content Modern SampleAndrew Schwartz
 
Retail Customer Service
Retail Customer ServiceRetail Customer Service
Retail Customer ServiceVinay Shekhar
 
CUSTOMER SERVICE POWERPOINT
CUSTOMER SERVICE POWERPOINTCUSTOMER SERVICE POWERPOINT
CUSTOMER SERVICE POWERPOINTAndrew Schwartz
 

Viewers also liked (9)

Rabbit mq
Rabbit mqRabbit mq
Rabbit mq
 
Router гэж юу вэ ?
Router гэж юу вэ ?Router гэж юу вэ ?
Router гэж юу вэ ?
 
The Impact of Messaging Standards on Event-Driven Architecture and IoT
The Impact of Messaging Standards on Event-Driven Architecture and IoTThe Impact of Messaging Standards on Event-Driven Architecture and IoT
The Impact of Messaging Standards on Event-Driven Architecture and IoT
 
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
 
Amqp Basic
Amqp BasicAmqp Basic
Amqp Basic
 
Customer Service Powerpoint
Customer Service PowerpointCustomer Service Powerpoint
Customer Service Powerpoint
 
Customer Service PowerPoint PPT Content Modern Sample
Customer Service PowerPoint PPT Content Modern SampleCustomer Service PowerPoint PPT Content Modern Sample
Customer Service PowerPoint PPT Content Modern Sample
 
Retail Customer Service
Retail Customer ServiceRetail Customer Service
Retail Customer Service
 
CUSTOMER SERVICE POWERPOINT
CUSTOMER SERVICE POWERPOINTCUSTOMER SERVICE POWERPOINT
CUSTOMER SERVICE POWERPOINT
 

Similar to Об очередях (AMQP)

C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Lenvendo
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart Sergei Seleznev
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1rit2011
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2Technopark
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
Matrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerMatrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerIvanShapovalov
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2Technopark
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploykuchinskaya
 
Qlogic: Технологии Ethernet
Qlogic: Технологии EthernetQlogic: Технологии Ethernet
Qlogic: Технологии EthernetExpolink
 
архитектура и принципы работы типового Web приложения
архитектура и принципы работы типового Web приложенияархитектура и принципы работы типового Web приложения
архитектура и принципы работы типового Web приложенияVladyslav Leikykh
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Ontico
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Ontico
 

Similar to Об очередях (AMQP) (20)

C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
Matrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerMatrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messenger
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2
 
NetSDS SMPP Server
NetSDS SMPP ServerNetSDS SMPP Server
NetSDS SMPP Server
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
Qlogic: Технологии Ethernet
Qlogic: Технологии EthernetQlogic: Технологии Ethernet
Qlogic: Технологии Ethernet
 
архитектура и принципы работы типового Web приложения
архитектура и принципы работы типового Web приложенияархитектура и принципы работы типового Web приложения
архитектура и принципы работы типового Web приложения
 
DNS
DNSDNS
DNS
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
 

Об очередях (AMQP)

  • 1. И снова об очередях Илья Чесноков UK2 Group
  • 2. Генерация уменьшенных картинок ● Клиент загружает изображения и уведомляет клиент об успехе ● Сервер генерирует уменьшенные копии и раскладывает их в нужные папки ● Заходящие пользователи видят предпросмотр для картинок
  • 3. «Бонусы» при покупке сервисов ● К домену прилагается N «стандартных» почтовых ящиков – клиент создает их сам при необходимости ● При покупке хостинга квота на ящик увеличивается ● Нужно обойти все созданные ранее ящики и увеличить им квоту – это долго – не относится напрямую к покупке хостинга ● Чтобы дать клиенту воспользовать хостингом как можно быстрее: – создаем только хостинг и уведомляем об успехе – задачу по изменению квоты почтовых ящиков передаем другому процессу
  • 4. Очередь задач (сообщений) ● Передача сообщения от одного процесса другому (возможно, находящемуся на другом сервере) ● Задачи обычно хранятся недолго ● Процедуры «положить» и «взять» задачу из очереди должны выполняться быстро ● Простота расширения и конфигурации ● Надежность систем передачи и хранения
  • 5. Реализации ● Hand-made ● Свободные реализации ● Hosted solutions (Amazon SQS, IronMQ, Azure AMQP service bus, etc)
  • 6. Свободные решения ● Queue::DBI — бэкенды, поддерживаемые DBI ● Minion — поддержка разных бэкендов (SQL, MongoDB, файлы, write your own!) ● Resque, Queue::Q — Redis backend ● ZeroMQ — собственный бэкенд и протокол ● RabbitMQ (и десятки других) — протокол AMQP
  • 7. AMQP ● Разработка начата в 2003г. John O'Hara из JPMorgan Chase Bank ● Цель: создать свободную реализацию протокола обмена сообщениями, который можно использовать в критически важных банковских задачах ● Определяет как формат передачи данных, так и поведение клиентского и серверного ПО ● Имеет множество реализаций на разных языках: – OpenAMQ – RabbitMQ – Apache Qpid – Red Hat Enterprise MRG
  • 8.
  • 9. Сообщения ● Содержат некоторые данные – заголовок, содержащий набор свойств сообщения – тело — содержимое сообщения, бинарные данные ● Могут храниться постоянно или временно – постоянные хранятся на диске и восстанавливаются после рестарта системы ● Могут иметь разный приоритет – поэтому очередь сообщений называют «слабой очередью»
  • 10. Поставщики и потребители сообщений ● Поставщик отправляет сообщения в обменник – может ждать или не ждать подтверждения получения ● Потребитель может: – просто «слушать» определенную очередь – создавать или уничтожать очереди – определять правила заполнения очередей – выбирать разные обменники, полностью меняя маршрутизацию сообщений внутри системы – указывать, сколько сообщений он может обработать (QoS) – подтверждать обработку сообщения или отказывать в его обработке
  • 11. Очередь сообщений (Message Queue) ● Именованный FIFO буфер, хранящий сообщения по запросу приложения-потребителя ● Хранит сообщения в памяти или на диске и доставляет их к одному или нескольким потребителям – одно сообщение из очереди может получить только один потребитель ● Свойства: – частные или общие – постоянные, временные, автоматически удаляемые – созданные клиентом или сервером
  • 12. Обменник (Exchange) ● Получает сообщения от поставщика (producer) ● Направляет их в очередь(и) или в другой обменник в соответствии с заданными критериями и параметрами сообщений: – заголовки сообщения ● routing_key – содержимое ● Может отправить одно сообщение в несколько очередей ● Как и очередь, может быть постоянным, временным, автоматически удаляемым
  • 13. Direct exchange ● Очередь «привязывается» к обменнику по ключу K ● Поставщик отправляет сообщение с ключом R ● Сообщение передается в очередь если K == R ● По умолчанию, все сообщения привязаны к безымянному обменнику, использующему имя очереди как routing_key
  • 14.
  • 15. Fanout exchange ● Очередь привязывается к обменнику без аргументов ● Поставщик отправляет сообщение в обменник ● Сообщение передается в очередь сообщений безо всяких условий (то есть сообщение передается во все очереди, привязанные к обменнику)
  • 16.
  • 17. Topic exchange ● Очередь привязывается к обменнику с шаблоном маршрутизации P – шаблон: 0 или более слов ([A-Za-z0-9]+), разделенных точками – * матчится с целым словом – # - 0 или более слов ● Поставщик отправляет сообщение с ключом R ● Сообщение передается в очередь, если R соответствует P
  • 18. Headers exchange ● При привязке очереди к обменнику передается таблица аргументов с заголовками, которые должно иметь сообщение для попадания в эту очередь (и опционально их значения). routing_key не используется. ● Поставщик отправляет сообщение с заголовками, содержащими таблицу имен и значений. ● Если заголовки сообщения совпадают с требуемыми, оно попадает в очередь.
  • 19. Perl-модули ● Net::AMQP (искать на search.cpan.org) ● AnyEvent::RabbitMQ ● Net::RabbitFoot ● Net::RabbitMQ
  • 20. Logging system ● Отправитель шлет сообщения, где routing_key имеет вид: <facility>.<severity> ● Получатели принимают только нужные им сообщения (от нужных приложений либо с нужной «важностью») и выполняют некоторые действия, например: – отображают на экране – сохраняют на диск – шлют по e-mail
  • 21. # producer.pl use Net::RabbitFoot; my $connection = Net::RabbitFoot new load_xml_spec→ → → ­>connect(%connect_arg); my $channel = $connection­>open_channel(); $channel­>declare_exchange(exchange => 'topic_logs', type => 'topic'); # Routing key: <facility>.<severity> my $routing_key = shift || 'anonymous.info'; my $message     = shift || 'Hello, World!'; $channel­>publish(     exchange    => 'topic_logs',     routing_key => $routing_key,     body        => $message, ); say "Send $routing_key:$message"; $connection­>close;
  • 24. ● ./consumer.pl *.error ● system.error: System error occured ● player.error: Player could not play ● ./consumer.pl player.info ● player.info: Player is playing Counter-Strike ● ./consumer.pl '#' ● system.error: System error occured ● player.error: Player could not play ● player.info: Player is playing Counter-Strike Использование ● ./producer.pl system.error "System error occured" ● ./producer.pl player.error "Player could not play ● ./producer.pl player.info "Player is playing Counter-Strike"
  • 25. Деплой ● Самое трудное — убедить всех, что это нужно ● Непривычно, что все приходится создавать программно – не забывать писать тесты для архитектуры
  • 26. Документация ● Спецификация AMQP (0.9.1 — для RabbitMQ) ● www.rabbitmq.com ● https://metacpan.org ● www.rubyamqp.info ● www.rubybunny.info
  • 27. ?