1. 云栖社区>
  2. PHP教程>
  3. 正文

分布式任务分发框架Gearman教程和PHP实现实例

作者:用户 来源:互联网 时间:2017-12-01 15:54:51

php框架实例分布式实现gearman教程分发任务

分布式任务分发框架Gearman教程和PHP实现实例 - 摘要: 本文讲的是分布式任务分发框架Gearman教程和PHP实现实例, 来自: http://blog.csdn.net//clh604/article/details/19706827 1、Gearman介绍和使用场景Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相 比,Gearm

来自: http://blog.csdn.net//clh604/article/details/19706827



1、Gearman介绍和使用场景

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



分布式任务分发框架Gearman<a href=教程和PHP实现实例">





通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用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,可以很方便的实现应用程序的分布式负载均衡架构。





2、Gearman job分发服务端安装

安装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
sudo make
sudo make install



中间可能会遇到些问题:

在./configure的时候,可能会出现缺少libraries的情况,一般是缺少libevent和uuid这两个开发包,安装之。。。



sudo apt-get install libevent-dev
sudo apt-get install uuid-dev



安装完成后再重新配置安装,安装完成后执行

sudo ldconfig

3、Gearman Client和Worker端PHP实现实例

安装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
sudo make
sudo make install

中间可能遇到的问题:
找不到phpize命令,phpize在php开发包中,所以要先安装php5-dev

sudo apt-get install php5-dev

安装完后,就可以在源码目录中执行phpize生成相关安装配置信息,接着执行后面的./configure等

make install后,它告诉你一个目录,生成的gearman.so就在那里。

根据需要考到相应PHP的扩展目录里(因为我直接用系统默认安装的php,它自动生成就在扩展中)


接下来修改php.ini以使php加载该模块:
php --ini

看下php.ini在哪里,sudo vim 修改之,在其中加入
extension = "gearman.so"

然后,开始编写client和worker端

client.php








[php] 
view plain copy








<?php    
  $client= new GearmanClient();    
  $client->addServer("127.0.0.1", 4730);    
  print $client->do("title", "Linvo");    
  print "/n";    
?>    






worker.php






[php] 
view plain copy








<?php    
  $worker= new GearmanWorker();    
  $worker->addServer("127.0.0.1", 4730);     
  $worker->addFunction("title", "title_function");    
  while (true){
     $worker->work();
     if ($this->worker->returnCode() != GEARMAN_SUCCESS) {
//Gearman 状态错误 需要做日志或异常处理
     }
  }
       
  function title_function($job)    
  {    
    $str = $job->workload();    
    return strlen($str);    
  }    
?>  






准备工作已经完毕,试验开始

1、启动job

gearmand -d



2、启动worker

php -c /etc/php5/apache2/php.ini worker.php



3、启动client(新开终端中打开)

php -c /etc/php5/apache2/php.ini client.php



屏幕显示字符串的长度 “5”



这里,有几点需要说明一下:

1、这里直接用php cli方式运行,添加-c参数是为了加载php.ini配置文件,以加载gearman扩展

2、worker应该做成守护进程(CLI模式),可以开启多个,这样client发起的任务就会分发到各个worker分别来执行(自动负载均衡 )

这个例子由于太过简单,即使开启多个worker也无法看出效果,不过可以通过终止其中一个,可以看出系统自动切换到其他worker继续正常执行

3、同理,client也是可以开启多个的(模型请参考之前的那边日志)

4、同时,job也可以开启多个,以避免单点故障









分布式任务分发框架Gearman教程和PHP实现实例


分布式任务分发框架Gearman教程和PHP实现实例


分布式任务分发框架Gearman教程和PHP实现实例

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 框架 , 实例 , 分布式 , 实现 , gearman , 教程 , 分发 任务 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备