Меню

gearman установка на openserver windows

mnapoli / Gearman-Windows.md

Gearman can be installed on Windows through cygwin.

Install cygwin packages (through setup.exe):

Download and unpack libevent 1.4 sources (to a directory without spaces, e.g. C:\cygwin\tmp ), then run:

Now libevent should be installed on /usr/local/lib , but this path is not in the library path and GCC will not find it automatically.

You can copy the generated libraries to /usr/lib :

(this is not the cleanest solution, you are welcome to propose an alternative)

Download gearmand C server sources (to a directory without spaces, e.g. C:\cygwin\tmp ). Attention, because of this bug you can’ install a version higher than V0.14. Here is a direct link to download V0.14.

Now the server is installed and you can launch it from a cygwin terminal:

Or if you want it to be ultra verbose:

You can also start the process and detach it from the terminal:

In the 1st, start the Gearman server:

In the 2nd, start a worker:

In the 3rd, send a task to the Gearman server. It will be dispatched to the worker which will process it and return the result to the server, which will return it to you 3rd terminal.

This comment has been minimized.

jeffblack360 commented Aug 22, 2013

Thanks pal. You saved my chops.

This comment has been minimized.

pavelkucera commented Jan 29, 2014

Thank you very much for this!

This comment has been minimized.

vguptabpl commented Oct 6, 2014

my question is how we can work with windows. What changes will required in PHP.ini file?

This comment has been minimized.

likenson commented Mar 12, 2015

When I start gearmand.exe, i got these errors:
ERROR 2015-03-11 19:53:19.997184 [ main ] pthread_attr_setscope(Not supported) -> libgearman-server/thread.cc:389
FATAL 2015-03-11 19:53:19.997184 [ main ] gearman_server_thread_init(NULL) -> libgearman-server/gearmand_thread.cc:197
ERROR 2015-03-11 19:53:20.012784 [ main ] poll(Bad file descriptor) -> libgearman-server/timer.cc:77
Do you know how to fix that?

This comment has been minimized.

yairpe commented Apr 24, 2015

Thank you. Even now, two years later, and one cannot deploy the latest gearmand on Windows.

I spent almost two days trying to tweak and solve compilation issues with the current 0.41 version, and eventually had to use the old 0.14 version just to make it work.

I would suggest others to do the same or maybe install the Java version of the server and use it with PHP.

Why do I need gearman on windows? simple. I develop on windows and deploy on Unix.

This comment has been minimized.

naillizard commented May 6, 2015

In my case is the other way around, develop on mac and deploy to Windows «yuck». having a go installing latest version of gearman 1.1.12 on Windows Server 2012. Will let you guys know if I succeed. fingers crossed.

This comment has been minimized.

rlacerda83 commented May 7, 2015

@yairpe, which dll are you using? I am running the server with java, but I do not have the PHP extension to connect.

This comment has been minimized.

sandy-gitty commented Jul 16, 2015

Hi, thanks for this tutorial, i have installed gearman on windows but I’m unable to use this on my php script getting Fatal error: Class ‘GearmanClient’ not found’. any help? thanks in advance!

This comment has been minimized.

mchurichi commented Aug 9, 2015

Thanks, worked like a charm! Just for the records, in the latest versions of cygwin you can install libevent, so you don’t need to download and compile it manually.

This comment has been minimized.

jiby-seamedia commented Sep 1, 2015

Thanks, I followed these steps. But I have one doubt what is gearmand? is it same as gearman? I am a beginer, sorry for this stupid question

This comment has been minimized.

thongvo commented Apr 7, 2016

/usr/local/sbin/
This location didn’t exist on Windows.

источник

Сервер очередей Gearman: опыт практического использования и веб-приложение Gearman Monitor && Control

Сервер очередей Gearman — прекрасный инструмент. Но в работе сервер очередей в чем-то напоминает системный блок: что-то делает, но для того чтобы знать, что именно, и управлять процессом, нужен монитор с клавиатурой, и представление о том, что вообще происходит в системном блоке.
Зачастую кажется, что Gearman — как диковинный инструмент без рукоятки: интересен и красив, но неясно, зачем нужен, а пользоваться болезненно.
Нужно выбраться из этой ситуации, Gearman действительно хорош.
Давайте рассмотрим:

  • Gearman «на пальцах»
  • примеры реальных задач с использованием Gearman
  • веб-приложение и класс для мониторинга в реальном времени и управления процессами на сервере очередей Gearman
Читайте также:  настройка приставки квант ма
Можно ли объяснить принцип работы Gearman «на пальцах»?

Что такое воркер?
Это просто консольный скрипт, на каком языке программирования — неважно. Скрипт запущен постоянно, это демон.
При запуске воркер-демон отправляет на сервер строки — имена функций, которые он может выполнить, открывает сокет на сервер и ждет.

Какие данные получает воркер?
Воркеру приходит две строки: первая — имя ф-и, которую нужно выполнить, и вторая — аргумент. Подчеркнем: воркеру нельзя передать несколько аргументов, массив, объект — только строка, все другие виды данных должны быть приведены к строке — сериализация или json.
Собственно, что удивительного — вся передача данных по протоколу, например, HTTP — это тоже передача только строк.

Откуда приходят строки — задания для воркера?
Клиент Gearman, отправляя на сервер задачу, передает как раз две строки — имя функции, которую нужно выполнить, и аргумент в виде строки. При этом задача в очереди помечается как находящаяся в процессе выполнения.

И что дальше?
Если задача — фоновая, воркер выполняет функцию и передает на сервер только сигнал выполнения ф-и. Если задача — не фоновая, воркер передает Gearman строку — результат выполнения ф-и, и сигнал выполнения.
При получении сигнала выполнения Gearman отмечает задачу как выполненную и удаляет ее из очереди.

А если в процессе выполнения функции воркер аварийно завершит работу или в ф-и возникнет нештатная ситуация — то есть ф-я не выполнится?
Gearman в этом случае не получит сигнала успешного завершения, и задача останется в очереди

Что такое клиент?
Отдельное понятие «клиент» для Gearman сложно выделить. Можно обращаться к Gearman из ЯП, отправляя и принимая данные — можно отправить и ждать, можно в фоновом режиме. Но все еще проще.

«Получает», «отправляет», «приходят» — как происходит обмен данными с сервером? Нужны низкоуровневые дополнения в ЯП?
Общение с Gearman происходит через сокеты. Можно вообще не иметь дополнений в ЯП для работы с Gearman, обойтись работой с сокетами и Telnet. Так, например, в PHP работать с Gearman можно, установив PECL дополнение в язык, а можно использовать Pear библиотеку, просто подключив файлы нескольких классов.

Если клиент отправит на сервер задачу, а воркера нет для этой функции нет — или нет свободного, или нет вообще?
Задача «повиснет» в ожидании воркера. Если придут еще задачи на эту же функцию, образуется очередь — Gearman сервер очередей все же.

Можно ли на сервере очередей различить две задачи на одинаковую функцию?
Нет. Ни по аргументу, никак.

Можно ли узнать, какая в очереди отправленная задача?
Поскольку задачи на одну и ту же ф-ю неразличимы, то нет.

Можно ли узнать, сколько задач в очереди?
Да. Можно также узнать, сколько воркеров может обработать эту задачу, и откуда эти воркеры (IP).

Представим, что поступила одна задача, и ее могут выполнить несколько воркеров. Кому достается задача?
Задачи неразличимы, но и воркеры тоже неразличимы. Какому именно воркеру Gearman отдаст задачу — так просто не ответить. Очереди воркеров нет.

Какие виды задач бывают на сервере очередей?
Задачи можно разделить 1) по приоритетам, 2) фоновая задача или нет
1) Приоритетов три — обычный, low — менее приоритетный, чем обычный, и high — более высокого, чем обычный, приоритета. Приоритет учитывается в очереди, по умолчанию — обычный приоритет.
2) Фоновая задача ничего не отдает серверу очередей, и клиент не получает никаких данных. Обычная задача должна вернуть строку, и Gearman отдаст эту строку клиенту как результат выполнения задачи.

Сколько можно одновременно запустить воркеров?
Тут нужно уточнить — не сколько запустить, а сколько воркеров может одновременно подключиться к Gearman для обработки задач.
Теоретически — сколько угодно. В реальности максимальное числов воркеров может быть ограничено максимальным числом одновременных потоков на внешний ресурс, числом одновременных подключений к БД и прочими условиями, не зависящими от Gearman. Автору этих строк удавалось запустить около 1000 на одном сервере, далее начинала ругаться MySQL.

Читайте также:  настройки bios boot для установки windows

Можно ли работать в PHP с Gearman на Windows?
Вопрос разделяется на два: 1) можно ли запустить сам сервер очередей Gearman на Windows и 2) можно ли работать с уже имеющимся на внешнием хосте сервером очередей.
1) есть вариант установки Gearman на Windows с использованием cygwin

2) Для комфортной работы, для использования в коде привычных конструкций вида
и подобных требуются дополнения в язык. Это сразу накладывает ограничения: вы не только не можете это сделать под Windows, но и не сможете это сделать на хостинге, если у вас нет прав на доступ к серверу, позволяющих устанавливать пакеты.
Denwer и OpenServer не содержат дополнений для работы с Gearman.
Значит, выхода нет, Gearman — только для *nix систем?
Нет конечно. Решение проблемы — подключение к проекту библиотеки Pear Net_Gearman
Там другие названия классов и немного другая логика, но пережить это можно и работать с Gearman позволяет полноценно.

Реальные задачи с использованием Gearman

1) Рекламное агентство сопровождает рекламные кампании AdWords и Яндекс.Директ для средних и крупных интернет-магазинов. Информация о товарах меняется постоянно: меняются цены (курс доллара и пр.), появляются новые товары, некоторые товары заканчиваются на складе, некоторые снимаются с продажи. Товаров в каждом магазине тысячи и десятки тысяч.
Задача: сделать так, чтобы информация в рекламе AdWords и Яндекс.Директ была актуальной: нужно менять цены, добавлять рекламные объявления/группы/кампании для новых товаров, останавливать рекламу для закончившихся на складе, удалять объявления для товаров, снятых с продажи.
Задача просто решается с использованием Gearman: из БД формируем задачи — изменение цен, добавление, остановка, удаление. Далее задачи бросаются на сервер очередей, и там спокойно обрабатываются в несколько потоков: воркеры обращаются к API AdWords или API Яндекс.Директ и выполняют требуемые операции.
Получилось вот так:

Gearman здесь решает две задачи: параллельное выполнение процессов — раз, и регулирование доступа к внешним ресурсам.
Ни AdWords API, ни Яндекс.Директ API не дадут вам выполнять операции в сто, например, потоков — есть ограничение на количество запросов в секунду. В моем случае получилось максимум 4 потока к AdWords API и 8 потоков к Яндекс.Директ API.
О времени выполнения. Начальная загрузка 10к товаров занимает до несколько часов, создается несколько сотен тысяч объявлений, несколько сотен кампаний и пр. Обновление — несколько минут, полностью в автоматическом режиме.

2) Продолжение задачи 1. Почти все магазины передают данные в виде XML-файла. Но некоторые присылают XLS-файл. Нет проблемы получить данные из XLS-файла, есть PHPExcel. Но у PHPExcel есть нюанс: при обработке больших файлов он сильно тормозит, но главное — потребляет память вплоть до превышения лимитов в php.ini 1024Мб и больше.
Процесс обработки файла XLS с помощью PHPExcel может быть распараллелен (идея была почерпнута из вот этой публикации, спасибо MParshin). Воркеры читают файл по строкам, каждый воркер — свои строки, таким образом, процесс распараллеливается.
Здесь Gearman решает две задачи: 1)параллельная обработка и 2)обход ограничения на лимит памяти одного PHP-скрипта.
Разумеется, в этом случае тоже нельзя запустить тысячу, например, воркеров — память сервера тоже не бесконечна. В моем случае получалось обрабатывать XLS-файл в 20 потоков.

3) Крупный вендор — производитель оборудования — хочет знать, по каким ценам реально торгуется его оборудование. Данные можно получить из каталога, но опять же — только с сайта. Процесс стандартный: парсер, воркеры в несколько потоков получают данные с сайта каталога.
Наличие API в разработанной системе Gearman Monitor && Control позволяет демонстрировать клиенту — вендору — получение данных в реальном времени.
Здесь Gearman решает две задачи: параллельное получение и обработка данных, и отображение процесса в реальном времени.
Вот клиентский интерфейс системы.

4) Поставщики гостиничных услуг предоставляют данные. Задача: отобразить гостиницы на карте. Задача вроде бы совсем простая, так как данные предоставляются вместе с координатами. Но, к сожалению, многие из предоставленных координат неверные, и клиентам показывать такое нельзя — адрес в одном месте, а маркер гостиницы — совсем в другом. Было принято решение самостоятельно получать данные с помощью геокодера Гугла, используя адреса гостиниц. Но при простом вызове геокодера в яваскрипте многие маркеры не отображаются — яваскрипт пытается одновременно получить адреса всех гостиниц, геокодер блокирует большинство запросов из-за превышения лимита на число обращений в секунду.
Решение: все запросы геокодера из яваскрипта направляются на свой прокси, которые передает задачу на сервер очередей.
Здесь Gearman решает задачу регулирования и ограничения доступа к внешнему ресурсу — API геокодера Гугла.

Читайте также:  настройка яндекс дзен в визуальных закладках

5) Последний пример — комплексное использование сервера очередей. На сайте предоставлена специфическая информация о нескольких тысячах объектов. Задача: получить и перевести эту информацию. Решение: запускаем воркеры для получения информации, и воркеры для перевода. Первые воркеры в несколько потоков получают информацию, как только воркер получил требуемый текст, он опять ставит задачу на сервер очередей, задачу для воркеров перевода. Воркеры-переводчики переводят ее и кладут уже готовый материал в БД.
Gearman здесь используется стандартно — получение и обработка информации в несколько потоков, нюанс только в том, что воркеры сами ставят задачи другим воркерам.

На основе практических задач появились требования к системе управления Gearman

Представим, что мы работаем с сервером очередей. Как запустить один воркер? Набираем в консоли php worker.php
Ок, нужно запустить 20 воркеров для параллельной обработки. Открыть 20 консолей? Не вариант. Или нужно запустить несколько разных воркеров — та же проблема. Итак, требуется метод класса и реализация в веб-интерфейсе:
— запуск воркеров, с выбором какого именно и указанием количества
Ок, разрабатываем дальше, запустили воркер, он работает. А остановить его как? Обязательно нужна
— остановка воркеров
Ситуация: запустили несколько разных воркеров в процессе разработки, и — ой, стоп, все назад, параметр не тот! Нас выручит:
— остановка всех воркеров одним действием
Но воркер — он как маленький ребенок: делает чего-то, а что — неясно, за ним присмотр нужен. Для этого потребуется:
— логирование работы воркера
Тут чуть подробнее. Очень приятно видеть, что делает воркер, наслаждаться творением. Но вот ситуация: бац — и воркер вылетел. Или еще лучше — вообще не стартует. А что за ошибка? В коде неправильно, или исключение необработанное, или ошибку от внешнего сервиса не предусмотрели? Поэтому:
— логирование ошибок воркера, включая фатальные
Лог может быть большим, просмотр его утомителен, а зачастую невозможен из-за объема. требуется
— поиск в логе произвольного текста
С воркерами разобрались, они нам подвластны. А очередь?
Опять же, воркеры — как маленькие дети, разбирают кучку, а что в той кучке? Поэтому:
— вывод всех функций, которые зарегистрированы на сервере очередей
— вывод очереди задач по каждой функции
Но вот клиенты набросали на сервер очередей задач, по одной скопилось их 1000, а воркер — один и явно не справится, или вообще нет воркеров и не предвидится. Или ближе к жизни: внешний сервис, к которому обращались воркеры, недоступен, очередь нужно сбрасывать. Как быть? Требуется
— сброс/очистка очереди по каждой функции
Но вот мы наигрались Gearman, нужно отключаться. Или же мы что-то сделали не так, отправили на сервер очередей, и нужно срочно все остановить. Поможет
— полный сброс: очистка все очереди, останов всех воркеров.

Добавим, что все происходящее должно отображаться в реальном времени без всяких обновлений страницы.

Все указанные выше задачи решит класс Gearman_Monitor и веб приложение Gearman Monitor && Control, реализующее методы этого класса.
Проект Gearman Monitor && Control на Github

Вот видео работы веб-приложения

Для использования в разработке требуются классы Gearman_Monitor и Gmonitor_Settings (имена php-файлов совпадают с именами классов).
Свойства и методы классов подробно задокументированы в самих файлах. Поясним только вот это:

Здесь
ключ массива — имя функции, зарегистрированное воркером на сервере очередей
значение — То, что вы увидите в таблице, в любом виде. Это для удобства работы операторов — раз, и еще применение. Представим, что на одном сервере очередей «крутятся» несколько проектов. Разумеется, хочется видеть не все в куче, а только свой проект. Для этого указываем синонимы (если не указали, используется имя функции), и устанавливаем значение

В этом случае в таблице функций будут отображаться только те, для которых есть синонимы.

источник

Добавить комментарий

Adblock
detector