zfconf 2010: using message queues in day-to-day projects (zend_queue)
Post on 28-Nov-2014
6.630 Views
Preview:
DESCRIPTION
TRANSCRIPT
Использование очередей сообщений в повседневных
проектах, Zend_QueueДенис Баклыков, web-разработчик
27 марта 2010 г.Санкт-Петербург
Что такое очереди сообщений?
• FIFO – Первым пришёл — Первым ушёл
• Асинхронные сообщения• Распределённые системы• Время невидимости (Visibility
timeout)
2
Время невидимости
3
Парадигмы программирования с использование очередей сообщений• Плюсы– Отправитель и получатель не связаны между
собой– расширяемость
• Минусы– Нет гарантии доставки для отправителя
• point-to-point• publish/subscribe
4
MQ серверы
• MemcacheQ• Apache ActiveMq• RabbitMq• Redis• Amazon SQS• PgQ, Oracle Advanced Queuing,
5
Zend_Queue – История развития• Два разработчика: Justin Plock и Daniel Lo
Как это было:• 3 марта 2008 – Создание Proposal’a в ZF wiki • 27 февраля 2009 – Код отправлен на одобрение сообществу• 9 апреля 2009 – Код готов к добавлению в репозиторий
• 31 июля 2009 - Появление в ZF 1.9.0
На разработку ушло больше года!
6
Интерфейс Zend_Queue
• Использован Паттерн «Стратегия»
• Работа с очередями– createQueue(), deleteQueue(), isExists()
• Работа с сообщениями– send(), receive(), deleteMessage(), count()
7
Адаптеры Zend_Queue
• Apache ActiveMQ• База данных – с использованием Zend_Db• MemcacheQ• Очередь задач Zend Platform• PHP Массив• Amazon MQ
• Redis – библиотека Rediska
8
Модифицирование Zend_Queue
Что можно модифицировать? Почти всё
• Адаптер• Класс-итератор для сообщений• Класс очереди – (extends Zend_Queue)• Класс-обёртка сообщения
9
Создание собственных адаптеров
• Реализовать Zend_Queue_Adapter_AdapterAbstract
• receive($n) – получение n сообщений• send() – отправка сообщения• isSupported(<имя_функции>) • getCapabilities() – список допустимых операций
10
Примеры использования очередей сообщений
11
Многожество последовательных действий
• Социальные сети - Загрузка фото (видео)
1. Сохранение файла 2. Запись информации в БД3. Уменьшение размера и создание
<превьюшек>4. Обновление новостей5. Рассылка email уведомлений
12
Классический пример Отправка emails
13
Без использования очередей сообщений
Классический пример Отправка emails
14
С использованием очередей сообщений
Мониторинг активности
• Поисковые запросы• Показы товара• Просмотр детальной информации
• Архитектура:– 8 серверов и 1 база данных– Real-time подсчёт статистики (почти real-time :)
15
Кэширование
Стандартное кэшированиеПараметры:• Время жизни
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
Полезные ресурсы
• Книга 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
Спасибо за внимание!
Ваши вопросы!
Контакты:
Email/Jabber: denis.baklikov@gmail.comSkype: dbaklikov
top related