gearman分布式处理系统

gearman分布式处理系统
一.Gearman介绍
Gearman架构图如下:
任务,分发
Gearman是一个分发任务的程序架构,由三部分组成:
Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的发起者。
Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。
Gearman worker:提供gearman worker API给应用程序调用,具体负责客户端的请求,并将处理结果返回给客户端。
Mogilefs的分布式文件系统的核心就是用gearman实现的。
这个软件的应用场景很多,比如视频网站的视频处理,分布式日志处理,电子邮件处理,文件同步处理,图片处理等等,只要是可以放开,不影响体验和响应的场景,需要并行进行大量计算和处理的程序都是可以的。Yahoo在60或更多的服务器上使用gearman每天处理600万个作业。新闻聚合器digg构建了一个相同规模的gearman网络,每天可处理400000个作业。
Gearman不但可以做为任务分发,还可以做为应用方面的负载均衡。可以让worker放在不同的一堆服务器上,也可以启动放在同一个cpu的多个核上。比如,应用视频转换程序,不希望web服务器来处理视频格式转换,这时,可以在这一堆服务器上进行任务分发,在上面加载worker处理视频格式,对外的web服务器就不会被视频转换过程影响。而且扩展方便,加一台服务器到任务调度中心,注册成worker即可,这时job server会在请求到来的时候,将请求发送给空闲的worker。还可以运行多个job server,组成ha架构,如果一个job server当掉了,client和worker会自动迁移到另一台job server上。

二.安装
【Job server—192.168.1.173】

# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.45.0/boost_1_45_0.tar.gz
# tar zxvf boost_1_45_0.tar.gz -C ../software/
# ./bjam
# ./bjam -s HAVE_ICU=1 --prefix=/home/xuhh/boost-1.45 --includedir=/home/xuhh/boost-1.45/include --libdir=/home/xuhh/boost-1.45/lib
# ./bjam install --prefix=/home/xuhh/boost-1.45
# cd /home/xuhh/boost-1.45/lib/
# cp -rf ./* /usr/lib/
# cp -rf ./* /usr/lib64/
# ln -s /home/xuhh/boost-1.45/include/boost /usr/include/boost
# wget http://launchpad.net/gearmand/trunk/0.25/+download/gearmand-0.25.tar.gz
# tar zxvf gearmand-0.25.tar.gz -C ../software/
# ./configure --prefix=/home/xuhh/gearmand-0.25 --with-boost=/home/xuhh/boost-1.45
# make
# make install
# /home/xuhh/gearmand-0.25/sbin/gearmand –d //启动gearmand服务

【worker—192.168.1.101】
Gearmand安装如上所示

# wget http://pecl.php.net/get/gearman-0.7.0.tgz
# tar zxvf gearman-0.7.0.tgz -C ../software/
# phpize5
# ./configure --prefix=/usr/local/gearman-0.7.0 --with-php-config=/usr/bin/php-config5 --with-gearman=/usr/local/gearmand-0.25
# make
# make install
# vim /etc/php5/conf.d/gearman.ini //添加如下一行
extension=gearman.so
# php -i | grep gearman //查看gearman是否加载
/etc/php5/cli/conf.d/gearman.ini,
gearman
gearman support => enabled
libgearman version => 0.25

【client—】
安装如worker同,如上所示。

三.测试
建立worker
# vi worker.php

$worker= new GearmanWorker();
$worker->addServer("192.168.1.173",4730);
$worker->addFunction("ttlsa", "ttlsa_function");
while ($worker->work());
function ttlsa_function($job)
{
return ucwords(strtolower($job->workload()));
}
?>

# php worker.php //worker上的应用程序持续运行,服务于客户端

建立client.php
# vi client.php

$client= new GearmanClient();
$client->addServer("192.168.1.173",4730);
print $client->do("ttlsa", "www.ttlsa.com");
print "\n";
?>

# php client.php