一、简介
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服务端
- wget https://launchpad.net/gearmand/1.1/1.1.11/+download/gearmand-1.1.11.tar.gz
- tar zxvf gearmand-1.1.11.tar.gz
- cd gearmand-1.1.11
- ./configure --prefix=/usr/local/webserver/gearmand
- make && make install
启动Gearman服务端:
/usr/local/webserver/gearmand/sbin/gearmand -d -u root --log-file=/data_disk/logs/gearman.log
- -b,–backlog= 储备的监听连接数量
- -d, –daemon 后台运行
- -f, –file-descriptors= 文件描述符的数量
- -h, –help 帮助
- -j, –job-retries= 在ob server移除不可用job之前运行的次数,防止不断运行导致其他可用worker崩溃。默认没有限制
- -l, -log-file= 日志文件存放位置(默认记录最简单日志)
- -L, –listen= 监听的IP,默认全部接受
- -p, –port= 指定监听端口
- -P, –pid-file= 指定进程ID写入位置
- -r, –protocol= 加载协议模块
- -q, –queue-type= 指定持久化队列
- -t, –threads= 使用的I/9线程数量。默认为0
- -u, –user= 启动后,切换到指定用户
- -v, –verbose 增加一级详细程度
- -V, –version 显示版本信息
出现Could not open log file这种错误,需要使--log-file指定日志文件
3.安装PHP扩展
- # wget http://pecl.php.net/get/gearman-1.1.1.tgz
- # tar zxvf gearman-1.1.1.tgz
- # cd gearman-1.1.1
- # /usr/local/webserver/php/bin/phpize
- # ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-gearman=/usr/local/webserver/gearmand/
- # make && make install
extension = "gearman.so"
安装PHP扩展时候,有可能因为版本问题导致安装失败。所以最好去官网看下最新版本。
- Gearman官网下载:http://gearman.org/download
- PHP驱动下载:http://pecl.php.net/package/gearman
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); //调用服务端的图片处理函数