学学Gearman

一般,多语言多系统之间的集成是个大问题,通常来讲,人们多半会采用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/passwdphp

相关文章
相关标签/搜索