项目地址:https://github.com/brianlmoon/GearmanManager

PHP环境要求

  • PHP 5.5.9
  • POSIX extension
  • Process Control extension
  • pecl/gearman or Net_Gearman

使用GearmanManager的理由

运行Gearman的Worker是项比较让人讨厌的任务。千篇一律的代码...GearmanManager的目标是让运行worker成为一项运维性任务而不是开发任务。

文件名直接对应于Gearmand服务器中的function,这种方式极大简化了function在worker中的注册。

工作原理

我们创建一个比如叫“worker_dir”的目录来存放所有的worker代码。以下写法基于安装了pecl/gearman扩展的情形下的写法:

过程式的代码:

# cat worker_dir/example_function.php

function example_function($job, &$log) {

    $workload = $job->workload();

    // do work on $job here as documented in pecl/gearman docs

    // Log is an array that is passed in by reference that can be
// added to for logging data that is not part of the return data
$log[] = "Success"; // return your result for the client
return $result; }

该文件的代码会在gearmand中注册一个名叫“example_function”的function。

面向对象式的代码:

# cat worker_dir/ExampleFunction.php

class ExampleFunction {

    public function run($job, &$log) {

        $workload = $job->workload();

        // do work on $job here as documented in pecl/gearman docs

        // Log is an array that is passed in by reference that can be
// added to for logging data that is not part of the return data
$log[] = "Success"; // return your result for the client
return $result; } }

该文件的代码会在gearmand中注册一个名叫“ExampleFunction”的function。

更多特性

GearmanManager不止是让创建worker更简单,它还提供进程管理。如果进程挂掉,会重新启动。也可以设置让worker运行一段时间后销毁以免内存溢出。

GearmanManager有个选项可以设置监控worker目录,当新代码被部署时重启相应的worker。

在关闭GearmanManager时,它会允许worker进程完成任务的执行后退出。

高级内容

配置Worker

默认情况下,GearmanManager会确保至少有一个Worker并且会执行所有的任务。也就是默认只创建一个进程。在生产环境这很明显不够理想。

GearmanManager的ini配置文件中由几段内容组成。先有全局部分:[GearmanManager] ,剩下的针对每个function可以定义一段内容。

worker_dir - 定义worker function文件存放目录,可以通过逗号分隔的形式指定多个目录

include - 要注册到该服务器的function清单,表示包含worker中所有function,默认为

count - 该设置定义了用于执行所有funciton所需运行的最低worker数。例如如果设为10,将会启动10个进程,并注册所有的function。默认值为0。

dedicated_count - 该设置定义了专用于某一个function的进程数。比如你有5个function,设置dedicated_count = 2,即为每个function启动了两个进程,总共10个进程。默认值为1。

max_worker_lifetime - 设置每个worker进程的最大生命周期,单位为秒。当worker完成任务后,worker会检测它是否运行到了最大生命周期,如果到了就会退出。manager进程就好启动一个新进程并注册同一个任务来替代退出的进程。默认值为1个小时。

auto_update - 如果设置为1,manager进程会启动一个助手进程来监控worker存放目录的变更。如果发现新代码文件,会发送信号给父进程以便杀掉worker进程来加载新的代码。

对于每个注册function的worker,也有单独的针对设置项。

count - 设置一个整数值来确保至少有多少个worker注册了该function。因为每个进程可以注册多个function。

dedicated_count - 设置一个整数值来确保至少有多少个进程专用于该function。该进程不会做其它事情。

日志记录

命令行有很多选择,通过-h可以查看。

-v :

-v Logs only information about the start up and shutdown

-vv Logs information about process creation and exiting

-vvv Logs information about workers and the work they are doing

-vvvv Logs debug information

-vvvvv Logs crazy amounts of data about all manner of things

-l 指定日志文件存放目录。如果未指定,日志数据将被发送到stdout。也可以设置为syslog以便让日志数据发送到syslog中。

指定Gearmand服务器

两种方式可以指定服务器:在命令行或配置文件中。

命令行: -h [HOST[:PORT][,[HOST[:PORT]]]]。 例如: -h 10.1.1.1:4730,10.1.1.2:4730

配置文件:在 [GearmanManager] 全局段:

host - 10.1.1.1:4730,10.1.1.2:4730

; exclude - A list of workers in worker_dir to exclude
; host - The gearmand host
; log_file - Path to log file or syslog
; max_runs_per_worker - Maximum number of jobs a worker will process before restarting
; pid_file - Path to the file where the pid will be stored for the main process
; prefix - Prefix for class names used by workers
; user - System user to run as
; worker_restart_splay - Number of seconds to stagger restarting and launching of workers to prevent all workers dying a
t once

运行守护进程

最简命令:

./pecl-manager.php -c /path/to/config.ini

还有其它一些参数:

-P - 管理进程的pid文件所在目录,也可以在配置文件中通过pid_file指定

-d - 如果在命令行指定该参数,管理器会以守护进程形式运行

-u - 指定守护进程的用户,也可在配置文件中通过user指定

调试

GearmanManager中用了(@),造成错误消息不提示,相应error_log是不会记录的,这样调试比较困难。

解决方案就是安装Xdebug:

  • Install Xdebug
  • Configure it
  • Profit!

安装调试工具

pecl install xdebug

配置调试工具

加上xdebug.scream参数到 xdebug.ini中:

zend_extension="/path/to/where/your/xdebug.so"
xdebug.scream = 1
xdebug.show_exception_trace = 1

用于PHP的Gearman Worker管理工具GearmanManager的更多相关文章

  1. gearman管理工具GearmanManager的安装与使用

    一.gearman自带了一个gearadmin工具 查看帮助信息 > gearadmin --help 查看状态 > gearadmin --status 查看worker信息 > ...

  2. k8s包管理工具helm - 介绍和安装

    目录 1.Kubernetes 应用部署的挑战 2.Helm 是什么 3.Helm 组件及相关术语 4.Helm 工作原理 5.Helm 安装 5.1 客户端安装 5.2 安装服务端 Tiller 5 ...

  3. 译:Google的大规模集群管理工具Borg(一)------ 用户视角的Borg特性

    概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机器构成. Borg通过组合准入控制,高效的 ...

  4. 大规模集群管理工具Borg

    Google的大规模集群管理工具Borg 概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机 ...

  5. Docker管理工具 - Swarm部署记录

    之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...

  6. Docker管理工具-Swarm

    一.Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Doc ...

  7. 常用MySQL图形化管理工具

    MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考. MySQL是一个非常流行的小型关系型数据 ...

  8. Servant:基于Web的IIS管理工具

    Servant for IIS是个管理IIS的简单.自动化的Web管理工具.安装Servant的过程很简单,只要双击批处理文件Install Servant Service.bat,然后按照屏幕上的说 ...

  9. 源代码管理工具之SVN

    源代码管理工具SVN是一款非常强大的源代码管理工具,现在国内70%-90%的公司都在使用SVN来管理源代码,下面就让小编给大家着重介绍一下SVN的使用,SVN的使用主要分为下面几块. SVN的使用环境 ...

随机推荐

  1. DIY一个前端模板引擎.(一)

    前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...

  2. 说说设计模式~适配器模式(Adapter)

    返回目录 之前和大家一起谈了工厂模式和单例模式,今天来看一下另一种非常常用的模式,它就是适配器模式,第一次看到这个模式是通过“张逸”老师的“设计之道”这篇文章,在这里表adapter讲的很透彻,今天把 ...

  3. atitit。企业的价值观 员工第一 vs 客户第一.docx

    atitit.企业的价值观 员工第一 vs 客户第一.docx 1. 客户第一的说法是错误的,员工优先是正确的,理念与价值观1 1.1. 任何一个组织,应该组织成员优先级要比外部成员高才对1 1.2. ...

  4. python学习 操作mysql 环境搭建

    MySqlDB官网只支持Python3.4,这里Python3.5使用第三方库PyMysql连接Mysql数据库. 环境: window7.python3.5 下载PyMysql库:https://p ...

  5. Jenkins的系统设置

    1.登录Jenkins进入以下界面: 2.点击 系统管理 3.点击 系统设置 (下图的系统设置是已经设置好的) 4.这里设置主要设置 Jenkins URL (这里我是测试的所以使用默认的)与 邮件的 ...

  6. Workflow中InArgument与OutArgument区别

    序号 InArgument[In参数] OutArgument[Out参数] 1 可以用VS设计器在xaml中定义[In参数]  可以用VS设计器在xaml中定义[Out参数] 2 在xaml中定义的 ...

  7. css图片叠加和底部定位

    css图片叠加和底部定位 css图片叠加 两张图片需要叠在一起显示,如何定位 容器先对定位 第一张图片正常摆放 第二张图片绝对定位,top:0px 这样便实现了两张图片叠加在一起了,设置z-index ...

  8. require.js笔记

    笔记参考来源:阮一峰  http://www.ruanyifeng.com/blog/2012/10/javascript_module.html   1. 浏览器端的模块只能采用“异步加载”方式 = ...

  9. andriod adt和andriod sdk

    今天搭建appium的环境,没有太明白andriod adt和andriod sdk分别是什么东西,经过与开发沟通,大致了解如下,这里记录一下,免得过几天就搞忘了. andriod adt是一个插件, ...

  10. Sql Server 的本地时间和UTC时间

    一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...