gearman使用场景_使用Gearman分配PHP应用程序的工作负载

gearman使用场景

尽管Web应用程序的大部分可能位于表示中,但其价值和竞争优势可能位于少数专有服务或算法中。 如果这种处理复杂或耗时,则最好以异步方式执行,以免Web服务器对传入的请求不响应。 实际上,最好在一个或多个单独的专用服务器上执行特别是计算密集型或专用功能。

PHP的Gearman库将工作分配到一组计算机中。 Gearman将作业排队并分配任务,将繁重的任务分配给为任务预留的机器。 该库可用于Perl,Ruby, C ,Python和PHP开发人员,并且可以在任何类似UNIX®的平台上运行,包括Mac OS X,Linux®和Sun Solaris。

将Gearman添加到PHP应用程序很容易。 假设您在典型的LAMP配置上托管PHP应用程序,那么Gearman需要一个附加的守护程序和一个PHP扩展。 截至2009年11月,Gearman守护程序的最新版本是0.10,并且提供了两个PHP扩展-一个使用PHP包装Gearman C库,另一个使用纯PHP编写。 本技巧使用前者。 它的最新版本是0.6.0,它的源代码可以从PECL或Github上(请参阅相关的主题 )。

注意:就本文而言, 生产者是生成工作请求的机器, 消费者是执行工作的机器,而代理是将生产者与合适的消费者联系起来的中介。

安装Gearman

将Gearman添加到机器需要两个步骤:构建和启动守护程序,以及构建PHP扩展以匹配您PHP版本。 守护程序包包括构建扩展所需的所有库。

首先,下载gearmand的最新源代码,Gearman守护程序,解压缩tarball,然后构建并安装代码。 (安装步骤需要超级用户root的特权。)

$ wget http://launchpad.net/gearmand/trunk/\
  0.10/+download/gearmand-0.10.tar.gz
$ tar xvzf gearmand-0.10.tar.gz
$ cd gearmand-0.10
$ ./configure
$ make
$ sudo make install

安装gearmand ,构建PHP扩展。 您可以从PECL提取tarball或从Github克隆存储库。

$ wget http://pecl.php.net/get/gearman-0.6.0.tgz
$ cd pecl-gearman
#
# or
#
$ git clone git://github.com/php/pecl-gearman.git
$ cd pecl-gearman

现在您已经有了代码,构建扩展已经很典型:

$ phpize
$ ./configure
$ make
$ sudo make install

Gearman守护程序通常安装在/ usr / sbin中。 您可以直接从命令行启动守护程序,也可以将守护程序添加到启动配置中以在每次计算机重新引导时启动。

接下来,您必须启用Gearman扩展程序。 打开您的php.ini文件(可以使用命令php --ini快速识别它),并添加extension = gearman.so

$ php --ini
Loaded Configuration File:         /etc/php/php.ini
$ vi /etc/php/php.ini 
...
extension = gearman.so

保存文件。 要验证扩展已启用,请运行php --info并查找Gearman:

$ php --info | grep "gearman support"
gearman
gearman support => enabled
libgearman version => 0.10

您还可以使用一段PHP代码来验证正确的构建和安装。 将这个小应用程序保存到verify_gearman.php:

<?php
  print gearman_version() . "\n";
?>

接下来,从命令行运行程序:

$ php verify_gearman.php
0.10

如果版本号与您先前构建和安装的Gearman库的版本号匹配,则系统已准备就绪。

正在运行的Gearman

如前所述,Gearman配置具有三种角色:

  • 一个或多个生产者生成工作请求。 每个工作请求名称就是了功能,如email_allanalyze
  • 一个或多个消费者满足需求。 每个使用者命名其提供的一个或多个功能,并向代理注册这些功能。 消费者也称为工人 。
  • 该代理程序将与它联系的消费者提供的所有服务归为一类。 它使生产者与有能力的消费者结婚。

您可以从命令行直接快速试用Gearman:

  1. 启动代理Gearman守护程序:
    $ sudo /usr/sbin/gearmand --daemon
  2. 使用命令行实用工具gearman运行工人。 工作人员需要一个名称,并且可以运行任何命令行实用程序。 例如,您可以创建一个工作程序以列出目录的内容。 -f参数命名工作程序提供的功能:
    $ gearman -w -f ls -- ls -lh
  3. 最后一个难题是生产者或生成查询请求的工作。 您也可以使用gearman生成请求。 再次,使用-f选项来阐明您需要帮助的服务:
    $ gearman -f ls < /dev/null
    drwxr-xr-x@ 43 supergiantrobot  staff   1.4K Nov 15 15:07 gearman-0.6.0
    -rw-r--r--@  1 supergiantrobot  staff    29K Oct  1 04:44 gearman-0.6.0.tgz
    -rw-r--r--@  1 supergiantrobot  staff   5.8K Nov 15 15:32 gearman.html
    drwxr-xr-x@ 32 supergiantrobot  staff   1.1K Nov 15 14:04 gearmand-0.10
    -rw-r--r--@  1 supergiantrobot  staff   5.3K Jan  1  1970 package.xml
    drwxr-xr-x  47 supergiantrobot  staff   1.6K Nov 15 14:45 pecl-gearman

从PHP使用Gearman

使用PHP中的Gearman与前面的示例类似,不同之处在于,您可以使用PHP创建生产者和消费者参与者。 每个使用者的工作都封装在一个或多个PHP函数中。

清单1显示了一个用PHP编写的Gearman worker。 将代码保存在名为worker.php的文件中。

清单1. Worker.php
<?php
  $worker= new GearmanWorker();
  $worker->addServer();
  $worker->addFunction("title", "title_function");
  while ($worker->work());
   
  function title_function($job)
  {
    return ucwords(strtolower($job->workload()));
  }
?>

清单2显示了用PHP编写的生产者或客户 。 将此代码保存在名为client.php的文件中。

清单2. Client.php
<?php
  $client= new GearmanClient();
  $client->addServer();
  print $client->do("title", "AlL THE World's a sTagE");
  print "\n";
?>

现在,您可以从命令行将客户端连接到工作程序:

$ php worker.php &
$ php client.php
All The World's A Stage
$ jobs
[3]+  Running                 php worker.php &

辅助应用程序继续运行,准备为另一个客户端提供服务。

Gearman的高级功能

Web应用程序中Gearman有许多可能的用途。 您可以导入大量数据,发送大量电子邮件,对视频文件进行编码,挖掘数据并构建中央日志工具,而所有这些都不会影响网站的体验和响应能力。 您可以并行处理数据。 此外,由于Gearman协议与语言和平台无关,因此您可以在解决方案中混合使用编程语言。 您可以使用PHP来编写生产器,而可以使用C ,Ruby或可以使用Gearman库的任何语言来编写工作器。

将客户与工人联系起来的Gearman网络几乎可以实现您可以想象的任何形状。 许多配置在多个计算机上运行多个代理并将工作分散。 负载平衡是隐式的:每个可操作且可用的工作程序(可能每个工作程序主机可能有许多工作程序)从队列中拉出作业。 作业可以优先级同步或异步运行。

Gearman的最新版本已扩展了系统的功能,包括持久性作业队列和新协议,可通过HTTP提交工作请求。 对于前者,Gearman工作队列保留在内存中,但由关系数据库支持。 因此,如果Gearman守护程序失败,则它可以在重新启动时重新创建工作队列。 最近的另一项改进是通过内存缓存集群增加了队列持久性。 memcached存储也依赖于内存,但是分布在多台计算机上以防止出现单点故障。

Gearman是一个新生但功能强大的工作分配系统。 根据Gearman作者Eric Day的说法,Yahoo! 在60台或更多服务器上使用Gearman来每天处理600万个工作。 新闻聚合商Digg建立了一个类似规模的Gearman网络,每天可处理40万个工作。 您可以在开源搜索引擎Narada中找到Gearman的详细示例(请参阅参考资料 )。

Gearman的未来版本将收集和报告统计信息,提供高级监视并缓存作业结果等。 要跟踪Gearman项目,请订阅其Google群组,或访问其Freenode上的IRC频道#gearman


翻译自: https://www.ibm.com/developerworks/opensource/library/os-php-gearman/index.html

gearman使用场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值