ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
-
Upload
zfconf-conference -
Category
Documents
-
view
6.630 -
download
0
description
Transcript of ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
![Page 1: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/1.jpg)
Использование очередей сообщений в повседневных
проектах, Zend_QueueДенис Баклыков, web-разработчик
27 марта 2010 г.Санкт-Петербург
![Page 2: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/2.jpg)
Что такое очереди сообщений?
• FIFO – Первым пришёл — Первым ушёл
• Асинхронные сообщения• Распределённые системы• Время невидимости (Visibility
timeout)
2
![Page 3: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/3.jpg)
Время невидимости
3
![Page 4: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/4.jpg)
Парадигмы программирования с использование очередей сообщений• Плюсы– Отправитель и получатель не связаны между
собой– расширяемость
• Минусы– Нет гарантии доставки для отправителя
• point-to-point• publish/subscribe
4
![Page 5: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/5.jpg)
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)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/6.jpg)
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)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/7.jpg)
Интерфейс Zend_Queue
• Использован Паттерн «Стратегия»
• Работа с очередями– createQueue(), deleteQueue(), isExists()
• Работа с сообщениями– send(), receive(), deleteMessage(), count()
7
![Page 8: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/8.jpg)
Адаптеры 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)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/9.jpg)
Модифицирование Zend_Queue
Что можно модифицировать? Почти всё
• Адаптер• Класс-итератор для сообщений• Класс очереди – (extends Zend_Queue)• Класс-обёртка сообщения
9
![Page 10: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/10.jpg)
Создание собственных адаптеров
• Реализовать 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)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/11.jpg)
Примеры использования очередей сообщений
11
![Page 12: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/12.jpg)
Многожество последовательных действий
• Социальные сети - Загрузка фото (видео)
1. Сохранение файла 2. Запись информации в БД3. Уменьшение размера и создание
<превьюшек>4. Обновление новостей5. Рассылка email уведомлений
12
![Page 13: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/13.jpg)
Классический пример Отправка emails
13
Без использования очередей сообщений
![Page 14: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/14.jpg)
Классический пример Отправка emails
14
С использованием очередей сообщений
![Page 15: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/15.jpg)
Мониторинг активности
• Поисковые запросы• Показы товара• Просмотр детальной информации
• Архитектура:– 8 серверов и 1 база данных– Real-time подсчёт статистики (почти real-time :)
15
![Page 16: ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/16.jpg)
Кэширование
Стандартное кэшированиеПараметры:• Время жизни
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)](https://reader035.fdocuments.us/reader035/viewer/2022070302/547e9c78b4af9fb9158b5720/html5/thumbnails/17.jpg)
Полезные ресурсы
• Книга 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