Gearman 分布式任务调度

21 篇文章 0 订阅

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资 源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。

Gearman 分布式任务实现原理上只用到2个字段,function name和data。function  name即任务名称,由client传给job server, job server根据function  name选择合适的worker节点来执行。data通常为执行任务所需的自定义的内容,比如简单的做法可以把需要执行的脚本当成data即可(当然要注 意其中的安全防范)。如果有多个worker可以处理同一个function name, 则job  server会自动分配一个。当用于远程监控场景时,我们可以让每个worker注册成不同的业务名称,以达到方便控制每台worker节点的目的。

 

 

 

Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。

一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。

Client:请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。
Job:请求的调度者,用来负责协调把Client发出的请求转发给合适的Work;即使挂掉一台依然能正常服务。
Worker:请求的处理者,可以是C,PHP,Perl等等;只要有一台worker活着,Job的分发任务都能执行。

优点:
1、分布式计算、很方便的实现负载均衡
2、避免单点故障,只要有一台Job和Worker活着,任务都会执行。
3、部署简单,跨语言调用便捷。

缺点:
1、目前Gearman最新的版本,为0.34;但安装过程中有报错;修改源码,勉强能安装成功,但不稳定。

方案:
Gearman在0.9版本后,更多是在做功能扩展;
如仅用其核心功能,综合稳定性和性能,建议选用0.9版;本文以用0.9版安装。

一、安装

策略:部署在JOB服务器上,即任务分配服务器

本文分别部署机器:192.168.35.197、192.168.35.198

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//libevent
wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
./configure --prefix=/usr
make && make install
ldconfig
//gearmand安装 0.9版
wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz
./configure --prefix=/opt/server/gearman
make
make install
//PHP版本 php-5.3.13.tar.gz (相信已安装,略过)
./configure --prefix=/opt/server/php --with-config-file-path=/opt/server/php/etc --enable-fpm
make
makeinstall
//gearman php扩展;
wget http://pecl.php.net/get/gearman-0.5.0.tgz
/opt/server/php/bin/phpize
./configure --with-php-config=/opt/server/php/bin/php-config --with-gearman=/opt/server/gearman
make
make install

启动守护进程

1
/opt/server/gearman/sbin/gearmand -uroot -p1234 -d

二、客户端程序

场景:广大的前端WEB服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//客户端连接
$gmclient= new GearmanClient();
$gmclient->addServer("192.168.35.197", 1234);
$gmclient->addServer("192.168.35.198", 1234);
//处理请求
$result = $gmclient->do("reverse", "Hello!");
var_dump($result);
?>

三、服务端程序

场景:用于相应WEB服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
//Worker 实例
$gmworker=new GearmanWorker();
$gmworker->addServer("192.168.35.197", 1234);
$gmworker->addServer("192.168.35.198", 1234);
//注册
$gmworker->addFunction("reverse", "reverse_fn");
//等待执行
while ($gmworker->work());
//处理逻辑;反转字符串
function reverse_fn($job)
{
return strrev($job->workload());
}
?>

四、总结

简单的分布式计算实现方式;比较简单不总结了吧。
扩展:可结合Nagios,设置Worker的管理监控,基本完美。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值