Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,218 views

Published on

  • Be the first to comment

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

  1. 1. Использование очередей сообщений в повседневных проектах , Zend_Queue Денис Баклыков , web- разработчик 27 марта 2010 г. Санкт-Петербург
  2. 2. Что такое очереди сообщений ? <ul><li>FIFO   </li></ul><ul><ul><li>Первым пришёл  — Первым ушёл </li></ul></ul><ul><li>Асинхронные сообщения </li></ul><ul><li>Распределённые системы </li></ul><ul><li>Время невидимости ( Visibility timeout ) </li></ul>
  3. 3. Время невидимости
  4. 4. Парадигмы программирования с использование очередей сообщений <ul><li>Плюсы </li></ul><ul><ul><li>Отправитель и получатель не связаны между собой </li></ul></ul><ul><ul><li>расширяемость </li></ul></ul><ul><li>Минусы </li></ul><ul><ul><li>Нет гарантии доставки для отправителя </li></ul></ul><ul><li>point-to-point </li></ul><ul><li>publish/subscribe </li></ul>
  5. 5. MQ серверы <ul><li>MemcacheQ </li></ul><ul><li>Apache ActiveMq </li></ul><ul><li>RabbitMq </li></ul><ul><li>Redis </li></ul><ul><li>Amazon SQS </li></ul><ul><li>PgQ, Oracle Advanced Queuing, </li></ul>
  6. 6. Zend_Queue – История развития <ul><li>Два разработчика: Justin Plock и Daniel Lo </li></ul><ul><li>Как это было: </li></ul><ul><li>3 марта 2008 – Создание Proposal’a в ZF wiki </li></ul><ul><li>27 февраля 2009 – Код отправлен на одобрение сообществу </li></ul><ul><li>9 апреля 2009 – Код готов к добавлению в репозиторий </li></ul><ul><li>31 июля 2009 - Появление в ZF 1.9.0 </li></ul><ul><li>На разработку ушло больше года! </li></ul>
  7. 7. Интерфейс Zend_Queue <ul><li>Использован Паттерн «Стратегия» </li></ul><ul><li>Работа с очередями </li></ul><ul><ul><li>createQueue(), deleteQueue(), isExists() </li></ul></ul><ul><li>Работа с сообщениями </li></ul><ul><ul><li>send(), receive(), deleteMessage() , count() </li></ul></ul>
  8. 8. Адаптеры Zend_Queue <ul><li>Apache ActiveMQ </li></ul><ul><li>База данных – с использованием Zend_Db </li></ul><ul><li>MemcacheQ </li></ul><ul><li>Очередь задач Zend Platform </li></ul><ul><li>PHP Массив </li></ul><ul><li>Amazon MQ </li></ul><ul><li>Redis – библиотека Rediska  </li></ul>
  9. 9. Модифицирование Zend_Queue <ul><li>Что можно модифицировать? </li></ul><ul><li>Почти всё  </li></ul><ul><li>Адаптер </li></ul><ul><li>Класс-итератор для сообщений </li></ul><ul><li>Класс очереди – ( extends Zend_Queue ) </li></ul><ul><li>Класс-обёртка сообщения </li></ul>
  10. 10. Создание собственных адаптеров <ul><li>Реализовать Zend_Queue_Adapter_AdapterAbstract </li></ul><ul><li>receive($n) – получение n сообщений </li></ul><ul><li>send() – отправка сообщения </li></ul><ul><li>isSupported(< имя_функции >)  </li></ul><ul><li>getCapabilities() </li></ul><ul><ul><li>список допустимых операций </li></ul></ul>
  11. 11. Примеры использования очередей сообщений
  12. 12. Многожество последовательных действий <ul><li>Социальные сети - Загрузка фото (видео) </li></ul><ul><ul><li>Сохранение файла </li></ul></ul><ul><ul><li>Запись информации в БД </li></ul></ul><ul><ul><li>Уменьшение размера и создание < превьюшек > </li></ul></ul><ul><ul><li>Обновление новостей </li></ul></ul><ul><ul><li>Рассылка email уведомлений </li></ul></ul>
  13. 13. Классический пример Отправка emails Без использования очередей сообщений
  14. 14. Классический пример Отправка emails С использованием очередей сообщений
  15. 15. Мониторинг активности <ul><li>Поисковые запросы </li></ul><ul><li>Показы товара </li></ul><ul><li>Просмотр детальной информации </li></ul><ul><li>Архитектура: </li></ul><ul><ul><li>8 серверов и 1 база данных </li></ul></ul><ul><ul><li>Real-time подсчёт статистики (почти real-time : ) </li></ul></ul>
  16. 16. Кэширование <ul><li>Стандартное кэширование </li></ul><ul><li>Параметры: </li></ul><ul><li>Время жизни </li></ul><ul><li>if (!($data = $cache->load($id))) { </li></ul><ul><li>// [...] заполнение $ data </li></ul><ul><li>$cache->save($data); </li></ul><ul><li>} </li></ul><ul><li>«Умное» кэширование </li></ul><ul><li>Параметры: </li></ul><ul><li>Реальное время жизни </li></ul><ul><li>Актуальное время жизни </li></ul><ul><li>if (!($data = $cache->load($id))) { </li></ul><ul><li>// [...] заполнение $ data </li></ul><ul><li>$cache->save($data); </li></ul><ul><li>} elseif ($data[‘alifetime’] < time()) { </li></ul><ul><li>$queue->send($name, $params); </li></ul><ul><li>} </li></ul>
  17. 17. Полезные ресурсы <ul><li>Книга Enterprise-Integration-Patterns </li></ul><ul><li>http://memcachedb.org/ memcacheq / </li></ul><ul><li>http://www.rabbitmq.com </li></ul><ul><li>http://activemq.apache.org </li></ul><ul><li>http://code.google.com/p/ redis / </li></ul><ul><li>http:// rediska .geometria-lab.net/ </li></ul><ul><li>http://aws.amazon.com/sqs/ </li></ul>
  18. 18. Спасибо за внимание! Ваши вопросы! Контакты: Email/Jabber: [email_address] Skype: dbaklikov

×