管理Gearman
通常,Gearman被用来分发任务,以便实现异步操作。下面捋捋如何管理Gearman。
说明:请自行安装好Gearman和PHP PECL Gearman。
准备
我们先来创建一个Worker,实现一个简单的显示功能:
<?php $worker= new GearmanWorker(); $worker->addServer('127.0.0.1', '4730'); $worker->addFunction('echo', 'my_echo_function'); while ($worker->work()); function my_echo_function($job) { return $job->workload(); } ?>
然后我们运行它:
shell> php /path/to/worker/file
可能你已经注意到,代码里有一个死循环,是不是需要Sleep一下?让我们监测看看:
shell> strace -r php /path/to/worker/file
在输出里能看到类似下面的信息:
0.000099 poll([{fd=3, events=POLLIN}], 1, 10000) = 0 (Timeout) 10.006522 write(3, "\0REQ\0\0\0\t\0\0\0\0", 12) = 12
可见PHP PECL Gearman内部已经做了休息十秒的设置,我们就不用杞人忧天了。
接下来我们以Shell为Client来调用一下:
shell> gearman -f echo "hello, world."
到这里,准备工作基本就齐活儿了,相信大家已经对Gearman有了一个初步的认识。
管理
出于效率的考虑,我们往往会启动很多个Worker,但具体应该启动多少个呢?十个还是一百个?少了不够,多了浪费,到底应该如何度量呢?
其实Gearman本身已经提供了相应的命令供我们查看状态:
shell> (echo status; sleep 0.1) | nc 127.0.0.1 4730
命令的结果会分为四列,它们的含义从左到右依次是:
Function name: A string denoting the name of the function of the job
Number in queue: A positive integer indicating the total number of jobs for this function in the queue. This includes currently running ones as well (next column)
Number of jobs running: A positive integer showing how many jobs of this function are currently running
Number of capable workers: A positive integer denoting the maximum possible count of workers that could be doing this job. Though they may not all be working on it due to other tasks holding them busy.
从这些信息可以推断出:如果系统比较繁忙的话,Number of jobs running的数值会接近Number of capable workers;Number in queue可能会大于Number of capable workers。此时我们应该增加Worker的数量,反之则应该考虑减少Worker的数量。
另外,推荐大家结合使用watch命令来监控Gearman的状态,这样更直观一些:
shell> watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"
实际应用中,还有很多特殊情况需要考虑,比如说:程序代码更新后,如何避免手动重启Worker?还需要注意的是Worker长时间运行,一旦意外中断或者内存泄漏怎么办?通常这类进程控制问题用Supervisor都可以轻松搞定,有兴趣的读者自己看看吧。此外网络上还有一些不错的工具可以玩玩,比如:GearmanManager。
建议继续学习:
- Gearman Server 使用 MySQL UDFs 来管理和保持队列 (阅读:4867)
- 进程运行于不同的 CPU 核 (阅读:4424)
- 利用开源的Gearman框架构建分布式图片处理平台[原创] (阅读:4263)
- Gearman分布式远程过程处理框架 (阅读:3335)
- 使用 Perl 中的 Gearman来实现 MapReduce (阅读:3063)
- 利用Gearman来实现远程监控与管理 (阅读:3032)
- 使用 Gearman 实现分布式处理 (阅读:2808)
- Gearman for MySQL (阅读:2603)
- 基于glusterfs和gearman的离线任务运算分布式化方案介绍 (阅读:2336)
- Gearman::XS 不能正常安装的解决方法 (阅读:1832)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:老王 来源: 火丁笔记
- 标签: Gearman
- 发布时间:2012-11-01 13:24:53
- [50] IOS安全–浅谈关于IOS加固的几种方法
- [50] 如何拿下简短的域名
- [49] Oracle MTS模式下 进程地址与会话信
- [49] 图书馆的世界纪录
- [48] android 开发入门
- [46] 【社会化设计】自我(self)部分――欢迎区
- [44] 读书笔记-壹百度:百度十年千倍的29条法则
- [42] Go Reflect 性能
- [39] 视觉调整-设计师 vs. 逻辑
- [37] 界面设计速成