Gearman 的安装和利用
官网地址:http://gearman.org/
先容Gearman是一个用来把事情委派给其他机器、分布式的调用更适宜做某项事情的机器、并发的做某项事情在多个调用间做负载均衡、或用来在调用其它措辞的函数的系统。
Gearman供应了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。它供应了你进行并行事情的能力、负载均衡处理的能力,以及在不同程序措辞之间沟通的能力。Gearman能够运用的领域非常广泛,从高可用的网站到数据库的复制任务。总之,Gearman便是卖力分发处理的中枢系统,它的优点包括:
开源:Gearman免费并且开源而且有一个非常生动的开源社区,如果你想来做一些贡献,请点击 。
多措辞支持:Gearman支持的措辞种类非常丰富。让我们能够用一种措辞来编写Worker程序,但是用其余一种措辞编写Client程序。
灵巧:不必拘泥于固定的形式。您可以采取你希望的任何形式,例如 Map/Reduce。
快速:Gearman的协议非常大略,并且有一个用C措辞实现的,经由优化的做事器,担保运用的负载在非常低的水平。
可植入:由于Gearman非常小巧、灵巧。因此您可以将他置入到现有的任何系统中。
没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失落败。
运行过程:一个Gearman要求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:要求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。
Job:要求的调度者,用来卖力折衷把 Client 发出的要求转发给得当的 Work。
Worker:要求的处理者,可以是 C,PHP,Perl 等等。
由于 Client,Worker 并不限定用一样的措辞,以是有利于多措辞多系统之间的集成。乃至我们通过增加更多的 Worker,可以很方便的实现运用程序的分布式负载均衡架构。
Gearman的事情事理:利用Gearman的运用常日有三部分组成:一个Client、一个Worker、一个 任务做事器。 Client的浸染是提出一个 Job 任务 交给 Job Server 任务做事器。Job Server 会去探求一个 得当的 Worker 来完成这项任务。Worker 实行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。Gearman 供应了 Client 和 Worker 的 API,利用这些API 运用可以同 Gearman Job Server来进行通信。Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。事情的流程如下图所示:
Paste_Image.png
Gearman的用途:Gearman首先供应了一个多措辞通讯的接口,当然还有比这个更大略有效的办法。Gearman可以将事情的负载分担到不同的机器中,如下图所示:
Paste_Image.png
Job Server 可以开启多个实例,这样在个中一个发生故障的时候,可以 Failover 到其他的机器上。同时 Worker 也可以是多个实例进走运行,由于当前的做事器很多都是多核的。
安装yum 安装安装gearmand
$ sudo yum install gearmand
安装php扩展
$ sudo yum install --enablerepo=remi --enablerepo=remi-php56 php-pecl-gearman
查看扩展是否安装成功
$ php -m | grep gearmangearman
源码安装
安装gearmand
$ wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz$ tar xvzf gearmand-1.1.12.tar.gz$ cd gearmand-1.1.12$ ./configure$ make$ sudo make install
安装php扩展
$ wget http://pecl.php.net/get/gearman-1.1.2.tgz$ tar xvzf gearman-1.1.2.tgz$ cd gearman-1.1.2$ phpize$ ./configure$ make$ make install
手动添加配置
$ php --ini //Loaded Configuration File: /etc/php/php.ini$ vi /etc/php/php.ini ...extension = gearman.so
利用干系代码:
worker.php
<?php $worker= new GearmanWorker(); $worker->addServer("127.0.0.1", 4730); $worker->addFunction("title", "title_function"); while ($worker->work()); function title_function($job){ return "你要求的数据:" . $job->workload() . " 要求韶光:" . date('Y-m-d H:i:s'); //return ucwords(strtolower($job->workload())); }?>
client.php
<?php $client= new GearmanClient(); $client->addServer("127.0.0.1", 4730); print $client->do("title", json_encode( [ 'username'=>'jack', 'email'=>'jack@foxmail.com', ] )); print "\n";?>
测试:
启动做事
$ sudo gearmand -d
启动worker
$ php worker.php &[1] 15135
启动client
$ php client.php 你要求的数据:{"username":"jack","email":"jack@foxmail.com"} 要求韶光:2017-07-10 23:25:30
参考:https://segmentfault.com/a/1190000000494087https://www.ibm.com/developerworks/cn/opensource/os-php-gearman/http://gearman.org/getting-started/#clienthttp://php.net/manual/zh/book.gearman.php