一、简介
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上。
1.yum install -y uuid-devel libuuid libuuid-devel uuid boost-devel libevent libevent-devel gperf
2.安装Gearman服务端
启动Gearman服务端:
/usr/local/webserver/gearmand/sbin/gearmand -d -u root --log-file=/data_disk/logs/gearman.log
出现Could not open log file这种错误,需要使--log-file指定日志文件
3.安装PHP扩展
安装PHP扩展时候,有可能因为版本问题导致安装失败。所以最好去官网看下最新版本。
2.替换php_gearman.c中的E_DEPRECATED为其他错误等级变量,比如E_ERROR
准备用多进程裁剪图片
应用示例:
Gearman的应用很简便,智能建站中的应用主要是根据图片处理请求,通过Gearman分发给相应的服务器进行处理,服务器进程根据具体任务要求,完成处理后,把结果返回给调用者。
worker简要代码如下:
<?php
require(‘../cavan-config.php’);
$worker= new GearmanWorker();//创建工作者对象
$worker->addServer();//创建服务端
$worker->addFunction(“compressPicture”, “ CompressPicture”);//添加函数
while ($worker->work());//执行工作
function CompressPicture ($job) //图片处理函数
{
……
}
Client简要代码如下:
$client= new GearmanClient(); //创建客户端
$client->addServer(); //连接服务端
$json=”{\”width\”:” . $source_pic_w . “,\”height\”:” . $source_pic_h . “,\”file\”:\”" . $this->dir . $this->name. “” . “.” . $this->ext . “\”,\”name\”:\”" . $this->name. “_thumb” . “\”,\”type\”:1}”;//json数据
$client->do(“compressPicture “, $json); //调用服务端的图片处理函数