Gearman的使用

简介

Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。总之,Gearman就是负责分发处理的中枢系统,它的优点包括

开源:Gearman免费并且开源而且有一个非常活跃的开源社区,如果你想来做一些贡献,请点击 。
多语言支持:Gearman支持的语言种类非常丰富。让我们能够用一种语言来编写Worker程序,但是用另外一种语言编写Client程序。
灵活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。
快速:Gearman的协议非常简单,并且有一个用C语言实现的,经过优化的服务器,保证应用的负载在非常低的水平。
可植入:因为Gearman非常小巧、灵活。因此您可以将他置入到现有的任何系统中。
没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失败。

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 连接来进行的。工作的流程如下图所示

Gearman的用处

Gearman首先提供了一个多语言通讯的接口,当然还有比这个更简单有效的办法。Gearman可以将工作的负载分担到不同的机器中,如下图所示

安装 Gearman

向一个机器添加 Gearman 需要两步:第一步构建并启动这个守护程序,第二步构建与 PHP 版本相匹配的 PHP 扩展。这个守护程序包包括构建此扩展所需的所有库

Install gcc

yum install gcc-c++

安装boost

wget https://github.com/boostorg/build/archive/2014.10.tar.gz
./bootstrap.sh
./b2 install

安装qperf

yum install gperf

安装libevent libevent-devel

yum -y install libevent libevent-devel

安装libuuid

wget http://downloads.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz
tar zxvf libuuid-1.0.3.tar.gz
./configure
make & make install

安装Gearmand

wget https://launchpad.net/gearmand/1.2/1.1.11/+download/gearmand-1.1.11.tar.gz
tar zxvf gearmand-1.1.11.tar.gz
cd gearmand-1.1.11
./configure
make & make install

安装gearman的PHP扩展

wget http://pecl.php.net/get/gearman-1.1.2.tgz
phpize
./configure
make & make install

启动 Job Server

gearmand -d

[[email protected] www]# ps -ef | grep gearmand
root     19109     1  0 01:06 ?        00:00:00 /usr/local/sbin/gearmand -d
root     22185  3160  0 03:19 pts/1    00:00:00 grep gearmand

命令行使用

ldconfig
[worker]
[[email protected] www] gearman -w -f wc -- wc -l

[client]
[[email protected] www] gearman -f wc < /etc/passwd
32

PHP脚本使用

[worker.php]

<?php

$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("strtoupper", "my_func");

while ($worker->work());

function my_func($job)
{
    return strtoupper($job->workload());
}

[client.php]

<?php

$client = new GearmanClient();
$client->addServer();
$string = $client->doNormal("strtoupper", "hello world");
echo $string;

[执行]

[[email protected] www]php worker.php

[[email protected] www]php client.php
HELLO WORLD

Gearmand 使用 Mysql 作为队列存储

[启动]
gearmand -d -q mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=root \
--mysql-password=123456 --mysql-db=test --mysql-table=gearman_queue
[查看数据表]
mysql> show tables;
+-------------------+
| Tables_in_gearman |
+-------------------+
| gearman_queue     |
+-------------------+
1 row in set (0.00 sec)

[测试]

#addTask: gearman -f testqueue -b xx00

mysql> select * from gearman_queue;
+--------------------------------------+---------------+----------+------+-------------+
| unique_key                           | function_name | priority | data | when_to_run |
+--------------------------------------+---------------+----------+------+-------------+
| 75f18bac-2f95-11e5-87c3-cb400fa24a6b | testqueue     |        1 | xx00 |           0 |
+--------------------------------------+---------------+----------+------+-------------+
1 row in set (0.00 sec)

#doJob:gearman -f testqueue -w

mysql> select * from gearman_queue;
Empty set (0.00 sec)

Gearman 的高级特性

在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所有这些均不会影响站点的体验和响应性。可以并行地处理数据。而且,由于 Gearman 协议是独立于语言和平台的,所以您可以在解决方案中混合编程语言。比如,可以用 PHP 编写一个 producer,用 C、Ruby 或其他任何支持 Gearman 库的语言编写 worker。

一 个连接客户机和 worker 的 Gearman 网络实际上可以使用任何您能想象得到的结构。很多配置能够运行多个代理并将 worker 分配到许多机器上。负载均衡是隐式的:每个可操作的可用 worker(可能是每个 worker 主机具有多个 worker)从队列中拉出作业。一个作业能够同步或异步运行并具有优先级。

Gearman 的最新版本已经将系统特性扩展到了包含持久的作业队列和用一个新协议来通过 HTTP 提交工作请求。对于前者,Gearman 工作队列保存在内存并在一个关系型数据库内存有备份。这样一来,如果 Gearman 守护程序故障,它就可以在重启后重新创建这个工作队列。另一个最新的改良通过一个 memcached 集群增加队列持久性。memcached 存储也依赖于内存,但被分散于几个机器以避免单点故障。

Gearman 是一个刚刚起步却很有实力的工作分发系统。据 Gearman 的作者 Eric Day 介绍,Yahoo! 在 60 或更多的服务器上使用 Gearman 每天处理 600 万个作业。新闻聚合器 Digg 也已构建了一个相同规模的 Gearman 网络,每天可处理 400,000 个作业。Gearman 的一个出色例子可以在 Narada 这个开源搜索引擎(参见 参考资料)中找到。

参考资料

http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/

http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html

时间: 09-02

Gearman的使用的相关文章

gearman mysql持久化

gearman 创建Mysql持久化队列的方式如下: 1. 登入mysql命令行,运行: create database gearman; 2. 启动gearman,命令如下: /usr/local/gearman/sbin/gearmand -p 4730 -L 0.0.0.0 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -q MySQL --mysql-host=localhost --mysql-u

centos6.6中service启动gearman服务

#!/bin/bash # chkconfig: - 85 15 #descrīption: service(/usr/local/gearmand-1.1.12/sbin/gearmand) . /etc/rc.d/init.d/functions start() { echo -n $"Starting $prog" echo -e " gearman : [确定]" /usr/local/gearmand-1.1.12/sbin/gearmand &

centos安装gearman

centos安装gearman post by rocdk890 / 2012-8-4 1:11 Saturday linux技术 发表评论 今天公司让我在服务器上安装gearman,服务器环境是lamp,那gearman是什么?其实这个gearman是一个处理分布式过程通信的健壮系统.它提供了一个通用的应用程序框架,主要用来把任务转发给到其他机器或进程.使用Gearman 能让程序实现并行工作.负载均衡和跨语言调用.它能够用于不同类型的应用程序,从高可用的web站点到数据库复制传输. 系统:c

Gearman简介

gearman,从名字上看叫做"齿轮工",就是通过齿轮把不同的组件组合在一起.通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题.一般会采用RPC风格或者是REST风格的WebService.但是总感觉比较麻烦.gearman就应运而生了,作为一个任务分发架构,它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理.Gearman请求的处理过程涉及三个角色:Client -> Job Server -> Worker. Client:请求的发起

Gearman 安装使用教程

#安装运行依赖 yum install -y boost boost-devel libevent gperf libuuid libuuid-devel #下载最新版 Gearman wget --no-check-certificate https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz ./configure make && make install mkdir -p /usr/loca

gearman在虚拟机上运行没有自动开启的处理

几天来被gearman无响应的问题困扰,后来请教了大神解决.原因是gearman在虚拟机上运行不稳定,无法自动开启,需手动开始,输入图片的两行命令即开始.

Gearman任务分布系统部署windows平台_使用Cygwin

1.下载Cygwin http://www.cygwin.com/ 然后选择 Install from Internet  -> Direct Connection -> 选择第一个网址就行 下面是选择库安装的截图,注意输入你需要的库,然后点击那个skip,看到出现版本号就行 2.安装时候选择库 下面是个人在配置的时候发现需要,当然你也可以编译gearman的时候去发现少那些库,在重新安装cygwin,然后搜索到这些库然后安装就可以了 gcc make libiconv boost libev

gearman安装

官网:  http://gearman.org/ 一篇文章: 利用Gearman实现异步任务处理 一.问题分析 问题:在性能测试过程中,发现用户管理平台在进行图片上传时,性能不佳. 分析:经过代码分析得知,主要的瓶颈是图片上传后,还需要根据图片组件所在页面模块容器进行一系列处理:图片生成缩略图,裁剪图片,加水印等,这些处理在高并发的情况下,会消耗大量cpu资源,导致系统响应速度非常慢. 旧的处理方式: 次控端调用前台接口进行上传图片后,前台程序先上传图片,接着,进行图片压缩等处理,然后再返回结果

gearman with postgresql as persistent Queuing

gearman is a good thing gearman client --------------> gearman server <------------------------gearman worker clients are requesting to handler something, gearman server is delivering jobs gearman workers get some jobs and finish. So different progr

用Gearman分发PHP应用程序的工作负载

文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/518 尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面.如果这类处理过于复杂或拖沓,最好是进行异步执行,以免 Web 服务器对传入的请求没有响应.实际上,将一个计算密集型的或专门化的功能放在一个或多个独立的专用服务器上运行,效果会更好. 常用的缩略词 API:应用程序编程接口 HTTP:超文本传输协议 LAMP:Linux.Apa