Transcript
Page 1: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Использование очередей сообщений в повседневных

проектах, Zend_QueueДенис Баклыков, web-разработчик

27 марта 2010 г.Санкт-Петербург

Page 2: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Что такое очереди сообщений?

• FIFO – Первым пришёл — Первым ушёл

• Асинхронные сообщения• Распределённые системы• Время невидимости (Visibility

timeout)

2

Page 3: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Время невидимости

3

Page 4: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Парадигмы программирования с использование очередей сообщений• Плюсы– Отправитель и получатель не связаны между

собой– расширяемость

• Минусы– Нет гарантии доставки для отправителя

• point-to-point• publish/subscribe

4

Page 5: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

MQ серверы

• MemcacheQ• Apache ActiveMq• RabbitMq• Redis• Amazon SQS• PgQ, Oracle Advanced Queuing,

5

Page 6: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Zend_Queue – История развития• Два разработчика: Justin Plock и Daniel Lo

Как это было:• 3 марта 2008 – Создание Proposal’a в ZF wiki • 27 февраля 2009 – Код отправлен на одобрение сообществу• 9 апреля 2009 – Код готов к добавлению в репозиторий

• 31 июля 2009 - Появление в ZF 1.9.0

На разработку ушло больше года!

6

Page 7: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Интерфейс Zend_Queue

• Использован Паттерн «Стратегия»

• Работа с очередями– createQueue(), deleteQueue(), isExists()

• Работа с сообщениями– send(), receive(), deleteMessage(), count()

7

Page 8: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Адаптеры Zend_Queue

• Apache ActiveMQ• База данных – с использованием Zend_Db• MemcacheQ• Очередь задач Zend Platform• PHP Массив• Amazon MQ

• Redis – библиотека Rediska

8

Page 9: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Модифицирование Zend_Queue

Что можно модифицировать? Почти всё

• Адаптер• Класс-итератор для сообщений• Класс очереди – (extends Zend_Queue)• Класс-обёртка сообщения

9

Page 10: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Создание собственных адаптеров

• Реализовать Zend_Queue_Adapter_AdapterAbstract

• receive($n) – получение n сообщений• send() – отправка сообщения• isSupported(<имя_функции>) • getCapabilities() – список допустимых операций

10

Page 11: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Примеры использования очередей сообщений

11

Page 12: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Многожество последовательных действий

• Социальные сети - Загрузка фото (видео)

1. Сохранение файла 2. Запись информации в БД3. Уменьшение размера и создание

<превьюшек>4. Обновление новостей5. Рассылка email уведомлений

12

Page 13: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Классический пример Отправка emails

13

Без использования очередей сообщений

Page 14: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Классический пример Отправка emails

14

С использованием очередей сообщений

Page 15: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Мониторинг активности

• Поисковые запросы• Показы товара• Просмотр детальной информации

• Архитектура:– 8 серверов и 1 база данных– Real-time подсчёт статистики (почти real-time :)

15

Page 16: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Кэширование

Стандартное кэшированиеПараметры:• Время жизни

if (!($data = $cache->load($id))) { // [...] заполнение $data $cache->save($data);}

«Умное» кэшированиеПараметры:• Реальное время жизни• Актуальное время жизни

if (!($data = $cache->load($id))) { // [...] заполнение $data $cache->save($data);} elseif ($data[‘alifetime’] < time()) { $queue->send($name, $params);}

16

Page 17: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

Полезные ресурсы

• Книга Enterprise-Integration-Patterns

• http://memcachedb.org/memcacheq/• http://www.rabbitmq.com• http://activemq.apache.org• http://code.google.com/p/redis/• http://rediska.geometria-lab.net/• http://aws.amazon.com/sqs/

17

Page 18: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)

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

Ваши вопросы!

Контакты:

Email/Jabber: [email protected]: dbaklikov


Recommended