Similar to ZFConf 2011: Разделение труда: Организация многозадачной, распределенной системы в Zend Framework с помощью Job Queue (Александр Готгельф) (20)
3. Очередь сообщений client server request getting request some tasks response response Синхронная обработка
4. Очередь сообщений client server request getting request response response some tasks Асинхронная обработка
5. Очередь сообщений Message system (servers) message1 message handler1 message2 message3 message handler2 message4 Backend message handler3 .... Frontend Так что же такое очередь сообщений?
9. Zend Server Job Queue Триггеры – результат взаимодействия Аналогия cron job Оптимизация системы, очистка базы... Job Queue Api
10. Zend Server Job Queue Пример – стандартный подход <?php function processingData($data) { if ( обработка $data) { returnTRUE; } else{ returnFALSE; } } // здесь мы вызываем функцию processingData для обработки данных($_POST['data']);
11. Zend Server Job Queue Пример – подход с использованием job queue API <?php $data=$_POST['data']; $q=new ZendJobQueue(); $ts= date('Y-m-d H:i:s', time()+10); $id=$q->createHttpJob('/jobs/processing_data.php', array('data'=>$data), array('name'=>'processing datausing a single job execution scheduled to run after 10 seconds','schedule_time'=>$ts)); if(!$id){ exit(1); }
12. Zend Server Job Queue Пример – подход с использованием job queue API Job script: <?php function processingData($data) { if( обработка $data){ return ZendJobQueue::setCurrentJobStatus(ZendJobQueue::OK); } else{ return ZendJobQueue::setCurrentJobStatus(ZendJobQueue::FAILED); } } $params= ZendJobQueue::getCurrentJobParams(); processingData($params['data']); ?>
15. Gearman Инсталляция: Качаем Сервер: http://gearman.org/index.php?id=download tar -xvzf gearmand-version.tar.gz cd gearmand ./configure make; make install
16. Инсталляция: Gearman Устанавливаем php extension pecl download gearman-0.7.0 tar -xvf gearman-0.7.0.tgz cd gearman-0.7.0 phpize ./configure make make install
18. Gearman Application code Gearman Client API Application Я - Gearman Job Sever (gearmand) Gearman Worker API Application code
19. Gearman Gearman включает в себя три основных компоненты: Client – создает задачи (jobs)для выполнения и отсылает их jobсерверу Job Server (gearmand) – координирует взаимодействие между clients и workers Worker – регистрируется у jobсервера и забирает задачи для выполнения
20. Gearman Принцип работы gearmand gearmand gearmand call(“funcB”) can_do(“funcA”) can_do(“funcA”) call(“funcA”) can_do(“funcB”) client client worker worker
22. Gearman Создание задачи: GearmanClient::do выполняет одну задачу и возвращает результат client.php GearmanClient::doBackground выполняет задачуасинхронно GearmanClient::addTask добавляет задачи в параллель, GearmanClient::runTasks выполняет пул задач(параллельно)
30. Job Queue: применение Асинхронные очереди Map/Reduce URL обработка Анализ логов и агрегация Работа с RSS фидами Обработка и анализ логов
31. Job Queue: применение (логи) Apache Node2 access_log client Apache Node1 access_log client Apache Node2 access_log client Gearman job server Worker Log Data Worker Worker Log Data Worker Worker Log Data Worker Gearman job server Client Анализ логов Client tail -f
32. Job Queue: применение (логи) tail -f test | gearman -n -h localhost -f logger имя файла Шлет пакет данных для каждой линии хост имя функции для воркера
33. Job Queue: электронная комерция Market Basket Analysis Анализ комбинаций покупаемых продуктов Время покупки Последовательность выбора
37. Job Queue Действительно ли применение рассмотренных технолоний способно принести выйгрыш в производительности? Попробуем дать ответ с помощью примера. У нас есть внешний источник данных, которые нужно обработать и сохранить в базе. Причем сохранять данные нужно по одной единице, так как каждая из них требует дополнительную обработку.