通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的复杂性。相比之下,
Gearman也能实现类似的作用,而且更简单易用。
一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。
Job:请求的调度者,用来负责协调把Client发出的请求转发给合适的Work。
Worker:请求的处理者,可以是C,PHP,Perl等等。
因为Client,Worker并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的Worker,可以很方便的实现应用程序的分布式负载均衡架构。
下面看看如何安装运行一个例子,条件所限,我们把Client,Job,Worker三个角色运行在一台服务器上:
安装Gearman server and library:wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install安装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
编辑php.ini配置文件加载相应模块并使之生效:
extension = "gearman.so"启动Job:gearmand -d
如果当前用户是root的话,则需要这样操作:
gearmand -d -u root
缺省会使用4730端口,下面会用到。
注意:如果找不到gearmand命令的路径,别忘了用whereis gearmand确认。
编写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 &编写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
出于方便的考虑,Worker,Client使用的都是PHP,但这并不影响演示,实际应用中,你完全可以通过Gearman集成不同语言实现的Worker,Client。或许此时你还想了解前面提到的负载均衡功能:很简单,只要增加多个Worker即可,你可以按照worker.php的样子多写几个类似的文件,并设置不同的返回值用以识别演示效果。然后依次启动这几个Worker文件,并多次使用client.php去请求,你就会发现Job会把Client请求转发给不同的Worker。
命令行工具
如果你觉得安装PHP之类的东西太麻烦的话,你也可以仅仅通过命令行工具来体验Gearman的功能:
启动Worker:
gearman -w -f wc -- wc -l &
运行Client:
gearman -f wc < /etc/passwd
具体可以参考
官方文档,还有一些不错的
PDF。
分享到:
相关推荐
齿轮工分布的工作 熟悉Gearman的分布式工作
Gearman分布式计算框架与金山逍遥DIPS分布式图片处理平
gearman下载gearman下载gearman下载gearman下载gearman下载
Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。
gearman 文档,gearman 是个集群计算框架,通过对其扩展能够充分利用集群计算
这是用于分布式作业系统的纯Ruby库。 需要做什么? 更多测试,一些代码清除。 这到底是什么 目前,该库对Ruby应用程序具有客户端和工作程序支持。 入门 客户 一个非常简单的客户端,它提交“睡眠”作业并等待100秒...
Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。
java-gearman-service-0.6.6.zip 包,gearman分为3部分,client - server - worker,创建 java 版本的...两者的调用API是不太相同的,个人觉得,gearman官方推荐的java-gearman-service-0.6.6.jar使用相对更简单些。
GearMAN讲解及所带来的变革 全面介绍Gearman原理、应用
Gearman环境搭建可能会用到的资料. gearmand-1.1.12.tar.gz libevent-2.0.22-stable.tar.gz libuuid-1.0.3.tar.gz
Laravel开发-php-gearman Gearman作业服务器工人助手
Gearman 的C#开发API和一个简单自带demo,vs2008.
Gearman安装相关资源 《gearmand-1.1.12.tar.gz》 《gearman-1.1.2.tgz》
java实现gearman的job实现的jar包,包括gearman server,client和work客户端API
在使用 Gearman 做分布式处理时,各机需要注册一个独立的 job 作为信息反馈,为求方便,Gearman::Worker 脚本 register_function 代码又要通用,于是想到了使用各自的 ip 地址作为 job 命名。 那么怎么在 worker ...
gearman的java库有两个,一个是gearman service ,一个是gearman java,相比来说service版本更好用一些,并且网上的教程一般是用的这个版本。因此我打好了gearman service的包提供给需要的开发者使用。
Laravel开发-laravel-gearman-rpc Laravel/Lumen Gearman RPC。基于https://github.com/mhlavc/gearman
该资源包括安装Gearman时可能涉及到的软件包 具体包括gearmand、gearman、php、gperf、libevent
本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下: 一、准备工作 1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。 2、使用gearmanManager来管理...
主要介绍了php使用gearman进行任务分发操作,结合实例形式详细分析了gearman的安装以及PHP使用gearman进行异步处理任务相关操作技巧,需要的朋友可以参考下