日向夏特殊応援部隊

俺様向けメモ

C でリライトされてるジョブサーバー gearmand を試した

いつの間にやら http://gearmanproject.org/doku.php にて、gearman library 0.1 が C で書き直されてました。MySQL で有名な Brian Aker らが開発しているようです。
これは期待出来るかも?

追試 (2009-01-16T21:49:11+09:00)

0.02 がリリースしてたので試してみました。下のサンプルは正常に安定して動いてました。
一応報告。

インストール

CentOS 5.2 で試してみました。

libevent のインストール

CentOS の libevent は yum でインストールすると、1.1a と言うとんでもなく古いもので、これでは gearman library はコンパイル出来ません。従ってソースからインストールします。

$ cd /usr/local/src
$ wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
$ tar xfz libevent-1.4.9-stable.tar.gz
$ cd libevent-1.4.9-stable
$ ./configure --enable-shared
$ make && make install

とかこんな感じで。

gearman のインストール

こっちもソースからインストールします。

$ cd /usr/local/src
$ wget http://launchpad.net/gearmand/trunk/0.1/+download/gearmand-0.1.tar.gz
$ tar xfz gearmand-0.1.tar.gz
$ cd gearmand-0.1
$ ./configure --enable-shared --with-event=/usr/local
$ make && make install

試してみる

以前書いた奴をコピペした。

ソース

worker.pl

#!/usr/bin/perl

use strict;
use warnings;

use Gearman::Worker;
use Storable qw(thaw);
use List::Util qw(sum);

my $worker = Gearman::Worker->new;
$worker->job_servers('localhost');

$worker->register_function(
    sum => sub {
        my $job = shift;
        my @args = @{thaw($job->arg)};

        return sum @args;
    }
);

$worker->work while(1);

client.pl

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dump qw(dump);
use Perl6::Say;
use Storable qw(freeze thaw);
use Gearman::Client;
use Gearman::Task;

my $client = Gearman::Client->new;
$client->job_servers(qw|localhost|);

my $args = freeze([1..9]);

my $result_ref = $client->do_task("sum", \$args, {});
say dump($$result_ref);
試してみる

gearmand を起動してみる。今回はテスト目的なので -v つけておく。

$ /usr/local/bin/gearmand -v

でどうなったかと言うと、

Method for libevent: epoll
Listening on port 7003



      127.0.0.1:49696 Connected (1 current, 1 total)



      127.0.0.1:49697 Connected (2 current, 2 total)
      127.0.0.1:49697 Disconnected
Segmentation fault

って感じ。client のコード一回実行して結果が返ってきたんだけど、結局 Seg って落ちた><
まだまだ安定版とは言えなさそうですね。

ちなみに Client Library も提供されてるので C や C++ で worker や client を記述する事が可能みたいです。
安定してきたら面白そう。

そういえば、Storable じゃなくて JSON 形式でデータ扱えばいいのかな。そっちのがポータブルですよね。
とりあえず皆、Q4M 使っとけって事かなw