利用Gearman,搭建异步分布式计算平台_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > 利用Gearman,搭建异步分布式计算平台

利用Gearman,搭建异步分布式计算平台

 2013/10/30 7:57:57  abc123456789cba  程序员俱乐部  我要评论(0)
  • 摘要:分布式计算平台extensionperlfunctionphpGearman的介绍主页在http://gearman.org/index.php,它的主要优点有:1.实现了异步计算。可以将比较耗时的计算分配到分布式计算集群来减少站点服务器的压力和用户的等待。例如passport里的邮件发送/头像上传裁减/国内外数据分离请求等等。2.跨语言,有利于多语言多系统之间的集成。PHP/Perl/Java/C++可以融合在一起,用Perl实现的邮件发送功能PHP也能自由调用
  • 标签:利用 ARM 异步
分布式计算平台extensionperlfunctionphp

Gearman的介绍

主页在http://gearman.org/index.php, 它的主要优点有:
1.class="Apple-converted-space">?实现了异步计算。可以将比较耗时的计算分配到分布式计算集群来减少站点服务器的压力和用户的等待。例如passport里的邮件发送/头像上传裁减/国内外数据分离请求等等。
2.?跨语言,有利于多语言多系统之间的集成。PHP/Perl/Java/C++可以融合在一起,用Perl实现的邮件发送功能PHP也能自由调用,也可以使用Perl调用另一台服务器上用C++编写的程序的一个函数。
3.?便于扩展和实现负载均衡。可以通过增加worker的数量来提供更好的性能,在其中一台出现问题的时候能够由其他的worker来完成任务。
4.?开源
5.?快速:?利用了c最小化的减少了系统开销。

?

Gearman的安装配置

1.安装Gearman server and library:


wget?http://launchpad.net/gearmand/tr ... gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install


2.安装Gearman PHP extension:

wget?http://pecl.php.net/get/gearman-0.4.0.tgz
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
make
make install


3.编辑php.ini配置文件加载相应模块并使之生效:

extension = "gearman.so"

4.启动Job:

gearmand -d

如果当前用户是root的话,则需要这样操作:

gearmand -d -u root

缺省会使用4730端口,下面会用到。

以调试的方式启动:

gearmand -vv

5.编写Worker:

worker.php文件内容如下:

<?php
$worker= new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('reverse', 'my_reverse_function');

while ($worker->work());

function my_reverse_function($job)
{
? ?? ?? ?? ?? ? return strrev($job->workload());
}
?>
??

设置后台运行work:

php worker.php &

6.编写Client:

client.php文件内容如下:

<?php
$client= new GearmanClient();
$client->addServer('127.0.0.1', 4730);
echo $client->do('reverse', 'Hello World!'), "/n";
?>


运行client:

php client.php

输出:!dlroW olleH
? 可能遇到的问题 ? [xhtml]?view plaincopy
  1. Couldn't?find?uuid/uuid.h??
解决办法:在新立得里搜索并安装uuid-dev。
? [xhtml]?view plaincopy
  1. gearmand:?error?while?loading?shared?libraries:?libgearman.so.1:?cannot?open?shared?object?file:?No?such?file?or?directory??
libgearman.so一般是在 /usr/local/lib下,看看/etc/ld.so.conf是否包含这个目录,执行/sbin/ldconfig -v刷新一下。
? [xhtml]?view plaincopy
  1. Fatal?error:?Class?'GearmanWorker'?not?found??
? ?是否在cli的php.ini下加入“extension="gearman.so"”这一行配置。 Gearman与Perl

安装Gearman模块,使用Gearman::Worker和Gearman::Client模块即可。
具体编码方式可参考cpan。
需要注意的是$client->do_task()方法返回的是一个reference。
下面是例子。 worker.pl [php]?view plaincopy
  1. use?Gearman::Worker;??
  2. my?$worker?=?Gearman::Worker->new;??
  3. $worker->job_servers('127.0.0.1:4730');??
  4. $worker->register_function("reverse",??/&test);??
  5. $worker->work?while?1;??
  6. ??
  7. sub?test?{??
  8. ????return?join('?',?$_[0]->handle,?$_[0]->arg,?'world',?"/n");??
  9. }??
client.pl [php]?view plaincopy
  1. use?Gearman::Client;??
  2. my?$client?=?Gearman::Client->new;??
  3. $client->job_servers('127.0.0.1:4730');??
  4. ??
  5. #?running?a?single?task??
  6. my?$result?=?$client->do_task("reverse",?"hello");?#?return?a?scalar?reference??
  7. print?$$result;??
? Gearman异步模式的实现
在Perl的Gearman::Client模块里已经实现了异步的方法,采用dispatch_background时client请求不会等待worker的响应就立即返回了。 http://blog.csdn.net/hfahe/article/details/5519582
上一篇: 简单Web单点登录SSO 下一篇: 没有下一篇了!
发表评论
用户名: 匿名