
Используем Gearman(менеджер очередей) в Kohana 3 или любом другом PHP сайте

Что такое Gearman?
Введение весьма неплохо описано тутЕсли вкратце то Gearman это менеджер очередей состоящий из трех компонентов:
- сервер задач — является центральной частью Gearman, именно сюда будут приходить задачи и результаты от клиентов и исполнителей, и именно отсюда будут высылаться задания и результаты, исполнителям и клиентам соответственно.
- исполнитель — является основной частью, где необходима реализация какой-либо функциональности. Исполнитель принимает и пытается выполнить задание от сервера.
- клиент — также имплементируется отдельно, создаёт и отсылает задачу на сервер и, в некоторых случаях (о них — позже), получает результат.
Кратко от авторов Gearman
- Open Source и BSD лицензия.
- Мультиязычность - Большой список поддерживаемых языков.
- Гибкость - Вы не ограничены какими-либо паттернами проектирования.
- Скорость - Gearman работает на простом протоколе и с оптимизированным интерфейсом, потоками. Сервер написан на C/C++ для минимизации оверхедов.
- Встраеваемый - быстры и легкий, удобен для любых масштабов приложений. Так же легко внедряется в существующие приложения с минимальным оверхедом.
- Нет единой точки отказа - Gearman помогает не только в масштабировании систем, но и в повышении отказоустойчивости.
- Нет ограничений на размер сообщения - Gearman поддерживает размер каждого сообщения до 4Гб в размере. Нужно больше? Не проблема, Gearman может делить сообщения на части.
- Обеспокоены масштабированием? - Не стоит. Craig’s List, Tumblr, Yelp, Etsy,… откройте для себя то о чем они уже знают годами.
Пользователь закачал фотографию на сайт, и хочет показать её всем своим друзьям. Необходимо быстро подготовить различные размеры данной фотографии, для использования по всему сайту. Да, до определённого момента все работы по генерации графики можно проводить в основном коде системы, а потом придёт хабраэффект, и вся система рухнет под наплывом желающих. Теперь рассмотрим как эту задачу можно решить с использованием Gearman — при получении фотографии, мы создаём задачу для gearman сервера, в которую входит необходимая информация о фотографии (в принципе возможно включить в задачу даже саму фотографию, но, мне кажется, это будет накладно, лучше использовать адрес) и отправляем её на выполнение. Сервер задач выбирает (round robin) свободного исполнителя (как Вы наверное уже догадались, исполнителей может быть несколько) и отсылает задачу на выполнение. Исполнитель получает всю необходимую информацию, обрабатывает её как нам бы этого и хотелось — и отправляет ответ об успешно выполненной задаче и, если задача была синхронная, результат работы.Врапперов к языкам для работы с Gearman достаточно много, так что все основные языки будут иметь возможность взаимодействовать с ним, среди них perl, php, python, java, C и другие. Сервер имеет возможность сохранять очередь задач в какое-либо хранилище, чтобы при рестарте была возможность восстановить весь процесс без потери данных. Хранилищем может выступать MySQL/drizzle, memcached, PostgreSQL или sqllite. Основной обьект над которым происходит вся работа в системе - Задача(Task), имеющая параметры. Идентифицируются задачи по ключу Название/Параметры. При полном совпадении ключей двух задач, будет выполнена только одна, остальные идентичные ей будут отброшены.
Установка
apt-get install gearman gearman-server gearman-job-server gearman-tools php5-gearman