SlideShare a Scribd company logo
Использование очередей сообщений в повседневных проектах , Zend_Queue Денис Баклыков , web- разработчик 27 марта 2010 г. Санкт-Петербург
Что такое очереди сообщений ?   FIFO    Первым пришёл  —  Первым ушёл Асинхронные сообщения Распределённые системы Время невидимости   ( Visibility timeout )
Время невидимости
Парадигмы программирования с использование очередей сообщений Плюсы Отправитель и получатель не связаны между собой расширяемость Минусы Нет гарантии доставки для отправителя point-to-point publish/subscribe
MQ  серверы MemcacheQ Apache ActiveMq RabbitMq Redis Amazon SQS PgQ, Oracle Advanced Queuing,
Zend_Queue –  История развития Два разработчика:  Justin Plock  и  Daniel Lo Как это было: 3  марта  2008  –   Создание  Proposal’a  в  ZF wiki  27  февраля  2009  – Код отправлен на одобрение сообществу 9  апреля  2009  – Код готов к добавлению в репозиторий 31  июля  2009  -  Появление в  ZF 1.9.0 На разработку ушло больше года!
Интерфейс  Zend_Queue Использован Паттерн «Стратегия» Работа с очередями createQueue(), deleteQueue(), isExists() Работа с сообщениями send(), receive(), deleteMessage() ,  count()
Адаптеры  Zend_Queue Apache ActiveMQ База данных – с использованием  Zend_Db MemcacheQ Очередь задач  Zend Platform PHP  Массив Amazon MQ Redis –  библиотека  Rediska 
Модифицирование  Zend_Queue Что можно модифицировать?  Почти всё   Адаптер Класс-итератор для сообщений Класс очереди – ( extends Zend_Queue ) Класс-обёртка сообщения
Создание собственных адаптеров Реализовать  Zend_Queue_Adapter_AdapterAbstract receive($n)  – получение  n  сообщений send() –  отправка сообщения isSupported(< имя_функции >)  getCapabilities()  список допустимых операций
Примеры использования очередей сообщений
Многожество последовательных действий Социальные сети - Загрузка фото (видео) Сохранение файла  Запись информации в БД Уменьшение размера и создание  < превьюшек > Обновление новостей Рассылка  email  уведомлений
Классический пример  Отправка  emails Без использования очередей   сообщений
Классический пример  Отправка  emails С использованием очередей   сообщений
Мониторинг активности Поисковые запросы Показы товара Просмотр детальной информации Архитектура: 8 серверов и 1 база данных Real-time  подсчёт статистики (почти  real-time : )
Кэширование Стандартное кэширование Параметры: Время жизни 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); }
Полезные ресурсы Книга  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/
Спасибо за внимание! Ваши вопросы! Контакты: Email/Jabber:  [email_address] Skype: dbaklikov
Ad

Recommended

Как легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облаке
Tatiana Smetanina
 
CloudDisk
CloudDisk
Ivan Semencha
 
Использование различных СУБД в высоконагруженных проектах
Использование различных СУБД в высоконагруженных проектах
Media Gorod
 
hl++ Rubtsov
hl++ Rubtsov
Ontico
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Ontico
 
Автоматизация мониторинга распределенной сети подразделений
Автоматизация мониторинга распределенной сети подразделений
Badoo Development
 
Разработка high load системы на .NET Core
Разработка high load системы на .NET Core
Andrew Gubskiy
 
vi stories: миграция на .NET Core
vi stories: миграция на .NET Core
Andrew Gubskiy
 
10.2
10.2
Средняя школа № 10 г. Слонима
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опыта
Elena Grahovac
 
Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)
Ontico
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
Badoo Development
 
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Alexander Leyn
 
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
IBS
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Kalle
 
The Art of Grey-Box Attack
The Art of Grey-Box Attack
Prathan Phongthiproek
 
Kehtna Koolitus
Kehtna Koolitus
Reigo35
 
Homophones L
Homophones L
jgd7971
 
Preacuerdo%20pccity%20sin%20lista
Preacuerdo%20pccity%20sin%20lista
oscargaliza
 
The Dynamite of Next Generation (Y) Attack
The Dynamite of Next Generation (Y) Attack
Prathan Phongthiproek
 
ParaEmpezarHowAreYou
ParaEmpezarHowAreYou
SenoraAmandaWhite
 
TEMA2AVocabulary
TEMA2AVocabulary
SenoraAmandaWhite
 
Zena acrta _cnc_30092011
Zena acrta _cnc_30092011
oscargaliza
 
Buyuk Taslar
Buyuk Taslar
mrelmas
 
Meridian Terms and Conditions
Meridian Terms and Conditions
AeroSvit Airlines
 
Hi,Cheese!!! - 1st draft
Hi,Cheese!!! - 1st draft
dddartwax
 

More Related Content

What's hot (6)

10.2
10.2
Средняя школа № 10 г. Слонима
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опыта
Elena Grahovac
 
Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)
Ontico
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
Badoo Development
 
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Alexander Leyn
 
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
IBS
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опыта
Elena Grahovac
 
Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)
Ontico
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
Badoo Development
 
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Alexander Leyn
 
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
IBS
 

Viewers also liked (20)

ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Kalle
 
The Art of Grey-Box Attack
The Art of Grey-Box Attack
Prathan Phongthiproek
 
Kehtna Koolitus
Kehtna Koolitus
Reigo35
 
Homophones L
Homophones L
jgd7971
 
Preacuerdo%20pccity%20sin%20lista
Preacuerdo%20pccity%20sin%20lista
oscargaliza
 
The Dynamite of Next Generation (Y) Attack
The Dynamite of Next Generation (Y) Attack
Prathan Phongthiproek
 
ParaEmpezarHowAreYou
ParaEmpezarHowAreYou
SenoraAmandaWhite
 
TEMA2AVocabulary
TEMA2AVocabulary
SenoraAmandaWhite
 
Zena acrta _cnc_30092011
Zena acrta _cnc_30092011
oscargaliza
 
Buyuk Taslar
Buyuk Taslar
mrelmas
 
Meridian Terms and Conditions
Meridian Terms and Conditions
AeroSvit Airlines
 
Hi,Cheese!!! - 1st draft
Hi,Cheese!!! - 1st draft
dddartwax
 
SEB
SEB
Dharini Bhaskar
 
The Operation CloudBurst Attack
The Operation CloudBurst Attack
Prathan Phongthiproek
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Liang Content Based Image Retrieval Using A Combination Of Visual Features An...
Kalle
 
Kehtna Koolitus
Kehtna Koolitus
Reigo35
 
Homophones L
Homophones L
jgd7971
 
Preacuerdo%20pccity%20sin%20lista
Preacuerdo%20pccity%20sin%20lista
oscargaliza
 
The Dynamite of Next Generation (Y) Attack
The Dynamite of Next Generation (Y) Attack
Prathan Phongthiproek
 
Zena acrta _cnc_30092011
Zena acrta _cnc_30092011
oscargaliza
 
Buyuk Taslar
Buyuk Taslar
mrelmas
 
Meridian Terms and Conditions
Meridian Terms and Conditions
AeroSvit Airlines
 
Hi,Cheese!!! - 1st draft
Hi,Cheese!!! - 1st draft
dddartwax
 
Ad

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

JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.js
Timur Shemsedinov
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
HTML 5
HTML 5
Alex Tumanoff
 
DevCon School: Построение корпоративных высоконагруженных инфраструктур в Azure
DevCon School: Построение корпоративных высоконагруженных инфраструктур в Azure
Dzmitry Durasau
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
 
Сайфуллин Сравнение почтовых систем
Сайфуллин Сравнение почтовых систем
Liudmila Li
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
Alexander Babich
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1
Technopark
 
IBM Proventia IPS
IBM Proventia IPS
Петр Королев
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
GreenHat и TIBCO EMS
GreenHat и TIBCO EMS
automated-testing.info
 
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
SECL
 
от задачи до Production
от задачи до Production
Andrey Kupreychik
 
Lviv PMDay 2016 S Микита Семенов: Як привести великий проект до успіху? Від і...
Lviv PMDay 2016 S Микита Семенов: Як привести великий проект до успіху? Від і...
Lviv Startup Club
 
Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с данными
Alexander Byndyu
 
Быстрое масштабирование систем
Быстрое масштабирование систем
Media Gorod
 
Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
Fwdays
 
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Cisco Russia
 
Big switch: жизнь после Microsoft
Big switch: жизнь после Microsoft
Alexander Byndyu
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.js
Timur Shemsedinov
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
DevCon School: Построение корпоративных высоконагруженных инфраструктур в Azure
DevCon School: Построение корпоративных высоконагруженных инфраструктур в Azure
Dzmitry Durasau
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
 
Сайфуллин Сравнение почтовых систем
Сайфуллин Сравнение почтовых систем
Liudmila Li
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
Alexander Babich
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1
Technopark
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
SECL
 
от задачи до Production
от задачи до Production
Andrey Kupreychik
 
Lviv PMDay 2016 S Микита Семенов: Як привести великий проект до успіху? Від і...
Lviv PMDay 2016 S Микита Семенов: Як привести великий проект до успіху? Від і...
Lviv Startup Club
 
Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с данными
Alexander Byndyu
 
Быстрое масштабирование систем
Быстрое масштабирование систем
Media Gorod
 
Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
Fwdays
 
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Защита центров обработки данных. Механизмы безопасности для классической фабр...
Cisco Russia
 
Big switch: жизнь после Microsoft
Big switch: жизнь после Microsoft
Alexander Byndyu
 
Ad

More from ZFConf Conference (20)

ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf Conference
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf Conference
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf Conference
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf Conference
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf Conference
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf Conference
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
ZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf Conference
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf Conference
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf Conference
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf Conference
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf Conference
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf Conference
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
ZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 

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

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

Editor's Notes

  • #3: http://en.wikipedia.org/wiki/FIFO http://en.wikipedia.org/wiki/Message_queue Message queues provide an  asynchronous   communications protocol , meaning that the sender and receiver of the message do not need to interact with the message queue at the same time. Messages placed onto the queue are stored until the recipient retrieves them. These message queueing systems typically provide enhanced  resilience  functionality to ensure that messages do not get &amp;quot;lost&amp;quot; in the event of a system failure. Очередь в программировании используется, как и в реальной жизни, когда нужно совершить какие-то действия в порядке их поступления, выполнив их последовательно. Примером может служить организация событий в Windows. Когда пользователь оказывает какое-то действие на приложение, то в приложении не вызывается соответствующая процедура (ведь в этот момент приложение может совершать другие действия), а ему присылается сообщение, содержащее информацию о совершенном действии, это сообщение ставится в очередь, и только когда будут обработаны сообщения, пришедшие ранее, приложение выполнит необходимое действие. Many of the more widely-known  communications protocols  in use operate  synchronously . The  HTTP  protocol – used in the  World Wide Web  and in  web services  – offers an obvious example. In many situations this makes perfect sense; for example, a user sends a request for a web page and then waits for a reply. However, other scenarios exist in which such behaviour is not appropriate. For example, an application may need to notify another that an event has occurred, but does not need to wait for a response. Another example occurs in  publish/subscribe  systems, where an application &amp;quot;publishes&amp;quot; information for any number of clients to read. In both these examples it would not make sense for the sender of the information to have to wait if, for example, one of the recipients had crashed. Alternatively, an interactive application may need to respond to certain parts of a request immediately (such as telling a customer that a sales request has been accepted, and handling the promise to draw on inventory), but may queue other parts (such as completing calculation of billing, forwarding data to the central accounting system, and calling on all sorts of other services) to be done some time later. In all these sorts of situations, having a subsystem which does asynchronous message-queuing (or alternatively, a broadcast messaging system) can help improve the behaviour of the overall system.
  • #4: http://docs.amazonwebservices.com/AWSSimpleQueueService/2008-01-01/SQSDeveloperGuide/index.html?AboutVT.html When a consuming component in your system receives and processes a message from the queue, the message remains in the queue. Why doesn&apos;t SQS automatically delete it? Because your system is distributed, there&apos;s no guarantee that the component will actually receive the message (it&apos;s possible the connection could break or the component could fail before receiving the message). Therefore, SQS does not delete the message, and instead, your consuming component must delete the message from the queue after receiving and processing it. Immediately after the component receives the message, the message is still in the queue. However, you don&apos;t want other components in the system receiving and processing the message again. Therefore, SQS blocks them with a  visibility timeout , which is a period of time during which SQS prevents other consuming components from receiving and processing that message. The following figure and discussion illustrate the concept. The visibility timeout clock starts ticking once SQS returns the message. During that time, the component processes and deletes the message. But what happens if the component fails before deleting the message? If your system doesn&apos;t call  DeleteMessage  for that message before the visibility timeout expires, the message again becomes visible to the  ReceiveMessage calls placed by the components in your system and it will be received again. If a message should only be received once, your system should delete it within the duration of the visibility timeout. Each queue starts with a default setting of 30 seconds for the visibility timeout. You can change that setting for the entire queue. Typically, you&apos;ll set the visibility timeout to the average time it takes to process and delete a message from the queue. When receiving messages, you can also set a special visibility timeout for the returned messages without changing the overall queue timeout. We recommend that if you have a system that produces messages that require varying amounts of time to process and delete, you create multiple queues, each with a different visibility timeout setting. Your system can then send all messages to a single queue that forwards each message to another queue with the appropriate visibility timeout based on the expected processing and deletion time for that message. The following table lists the API actions to use to manipulate the visibility timeout.
  • #5: http://en.wikipedia.org/wiki/Publish/subscribe Publish/subscribe  (or pub/sub) is a  messaging   paradigm  where senders (publishers) of messages are not programmed to send their messages to specific receivers (subscribers). Rather, published messages are characterized into classes, without knowledge of what (if any) subscribers there may be. Subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what (if any) publishers there are. This  decoupling  of publishers and subscribers can allow for greater  scalability  and a more dynamic  network topology . Pub/sub is a sibling of the  message queue  paradigm, and is typically one part of a larger  message-oriented middleware  system. Most messaging systems support both the pub/sub and message queue models in their  application programming interface  (API) (e.g.  Java Message Service  (JMS)). In the  point-to-point or queuing model , a  sender  posts messages to a particular queue and a  receiver  reads messages from the queue. Here, the sender knows the destination of the message and posts the message directly to the receiver&apos;s queue. It is characterized by the following: Only one consumer gets the message The producer does not have to be running at the time the consumer consumes the message, nor does the consumer need to be running at the time the message is sent Every message successfully processed is acknowledged by the consumer The  publish/subscribe model  supports publishing messages to a particular message topic.  Subscribers  may register interest in receiving messages on a particular message topic. In this model, neither the publisher  nor the subscriber know about each other. A good analogy for this is an anonymous bulletin board. The following are characteristics of this model: Multiple consumers can get the message There is a timing dependency between publishers and subscribers. The publisher has to create a subscription in order for clients to be able to subscribe. The subscriber has to remain continuously active to receive messages, unless it has established a durable subscription. In that case, messages published while the subscriber is not connected will be redistributed whenever it reconnects. Using Java, JMS provides a way of separating the application from the transport layer of providing data. The same Java  classes  can be used to communicate with different JMS providers by using the  JNDI  information for the desired provider. The classes first use a  connection factory  to connect to the queue or topic, and then use populate and send or publish the messages. On the receiving side, the clients then receive or subscribe to the messages.
  • #6: Тут красиво будет разместить картинки + фичи каждого адаптера Также рассказать про фичи каждого и когда какой удобнее использовать MemcacheQ - So we have a limit on the message body size with a max of a bit less than  64K . Redis – 110K SETs/second, 81K GETs/second in an entry level Linux box
  • #7: http://framework.zend.com/wiki/display/ZFPROP/Zend_Queue+-+Justin+Plock
  • #8: Стратегия ,  Strategy  — поведенческий  шаблон проектирования , предназначенный для определения семейства  алгоритмов ,  инкапсуляции  каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от  объектов -клиентов, которые его используют. Мотивы Программа должна обеспечивать различные варианты алгоритма или поведения Нужно изменять поведение каждого экземпляра класса Необходимо изменять поведение объектов на стадии выполнения Введение интерфейса позволяет классам-клиентам ничего не знать о классах, реализующих этот интерфейс и инкапсулирующих в себе конкретные алгоритмы
  • #9: http://framework.zend.com/manual/en/zend.queue.adapters.html http://rediska.geometria-lab.net/ Любые адаптеры на все случаи жизни  Можно легко переключаться между ними, изменяем только конфиг Apache ActiveMQ – быстрый, расширяемый, удобный, много API (Ajax API, REST) База данных – с использованием Zend_Db – простой вариант с неограниченным местом MemcacheQ - Очередь задач Zend Platform Массив – удобен для тестирования Redis – говорят что очень быстрый
  • #10: Примеры – Прозрачная архивация данных Конвертация JSON данных Снятие огранчения не отправку только текстовых сообщений (возможность отправлять объекты)
  • #11: http://framework.zend.com/manual/en/zend.queue.custom.html
  • #16: Описание системы мониторинга пользователя на сайте И системы подсчёта кликов
  • #17: Напримере турстанка – кеширование блоков Как говорил Илья Lifetime – неделя, но актуальный lifetime – 1day Никаких блокировок, обновление кэша из внешних программ