воскресенье, 15 апреля 2012 г.

Демон и клиент Gearman

Сегодня пойдет речь о расширении к PHP Gearman.
Исходный код проекта: GearmanDaemon


Gearman это универсальный фреймворк разработки приложений для раздачи работ множеству машин или процессов. Это позволяет приложениям выполнять задачи параллельно, распределяя нагрузку и использовать функции различных языков. Фреймворк может использоваться во множестве приложений, от высоконадежных веб-сайтов до транспорта событий репликации базы данных.

Т.е. у нас есть задача не на 15 секунд, допустим сделать несколько ресайзнутых копии загруженных пользователем фотографии в наилучшем качестве. Если это делать синхронно, то это может занять до нескольких минут. Для устранения проблемы ожидания создано это расширение.

Принцип работы:
  1. Клиент: Получаем данные от клиента (набор фотографии или другое.)
  2. Клиент: Разбиваем данные на группы по какому то признаку
  3. Клиент: Ставим задачи серверам: каждому серверу или разных потокам сервера своя задача
  4. Сервер: Демон сервера, на любом языке, получает новое задание, стартует поток и выполняет задание
В случае асинхронного выполнения, ответ обратно не отсылается. Но если задача выполняется синхронно, просто с разбивкой по потокам или серверам, то можно отправить ответ.

Более подробное описание реализации под катом.