Gearman (1) — установка и запуск

| Комментариев: 5

Через два с половиной года после первого подхода к gearmand мне захотелось (и появилась подходящая задача) попробовать его еще раз. Лучший способ вспомнить, как и что, — запустить примитивный пример.

Gearman — интересный и простой планировщик задач, серверная часть которого теперь существует и на C (а раньше была только перловая версия). Разрозненность документации (если говорить про Perl), правда, осталась на прежнем уровне. Как и необновленные ссылки на дистрибутив на основном сайте и потерянные симлинки после установки :-)

Итого. Что нужно.

1) Установить gearmand-демон (сервер).

./configure
make
make install

2) Установить модули для воркеров и клиентов.

cpan Gearman::Client

3) Запустить один или несколько серверов.

gearmand -d

4) Запустить один или несколько (например, на разных машинах) воркеров, которые подключить к единому серверу.

./worker.pl

5) Вызвать клиента и убедиться, что он работает даже когда один из воркеров не запущен.

./client.pl

При создании воркеров и клиентов нужно сразу учесть, что они ожидают номер порта. Воркер — это Gearman::Worker, а клиент — Gearman::Client, в остальном же работа с ними очень похожа.

Методу, исполняющему задачу, воркер передает аргумент типа Gearman::Job.

Воркер

Я запустил два воркера на разных компьютерах: один уменьшал полученный аргумент на единицу, а другой — увеличивал.

#!/usr/bin/perl

use v5.10;
use strict;
use Gearman::Worker;

my $worker = new Gearman::Worker;
$worker->job_servers('example.com:4730');
$worker->register_function(echo => \&echo);
$worker->work while 1;

sub echo {
    my $job = shift;
    say '+1';
    return $job->arg + 1;
}

Клиент

#!/usr/bin/perl

use v5.10;
use strict;
use Gearman::Client;

my $client = new Gearman::Client;
$client->job_servers('example.com:4730');

for (1..10000) {
    my $result_ref = $client->do_task('echo', 10);
    say $$result_ref;
}

Клиенты тоже интересно запускать на двух разных компьютерах и смотреть на печать и воркеров, и клиентов (можно еще смотреть и на логи сервера geramand, но это менее впечатляюще).

XS-вариант клиента тоже попробую.

Комментариев: 5

Спаcибо за эту информацию - завяжу узелок на память.
Как я понял количество процессов с Gearman::Worker надо контролировать самому? А как? Job сервер может вернуть информацию о размере очереди с работами?

Мысли вслух.
Интересно, а AnyEvent::Gearman::Worker может выполнять несколько задач одновременно?
А есть вообще в сервере поддержка этой позможности?

А если в примерах кода вместо "example.com" написать "localhost", то скрипты работали бы "из коробки".

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 01.12.2009 23:59. Автор — ash.

Предыдущая запись — is_ru

Следующая запись — Gearman (2) — асинхронный вызов

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