学学Gearman2009年07月11日 星期六 下午 04:13作者:老王
通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的复杂性。相比之下,Gearman也能实现类似的作用,而且更简单易用。
一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。
Job:请求的调度者,用来负责协调把Client发出的请求转发给合适的Work。
Worker:请求的处理者,可以是C,PHP,Perl等等。
因为Client,Worker并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的Worker,可以很方便的实现应用程序的分布式负载均衡架构。
下面看看如何安装运行一个例子,条件所限,我们把Client,Job,Worker三个角色运行在一台服务器上:
安装Gearman server and library:
wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install
安装Gearman PHP extension:
wget http://pecl.php.net/get/gearman-0.4.0.tgz
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
make
make install
编辑php.ini配置文件加载相应模块并使之生效:
extension = "gearman.so"
启动Job:
gearmand -d
如果当前用户是root的话,则需要这样操作:
gearmand -d -u root
缺省会使用4730端口,下面会用到。
注意:如果找不到gearmand命令的路径,别忘了用whereis gearmand确认。
编写Worker:
worker.php文件内容如下:
<?php
$worker= new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('reverse', 'my_reverse_function');
while ($worker->work());
function my_reverse_function($job)
{
return strrev($job->workload());
}
?>
设置后台运行work:
php worker.php &
编写Client:
client.php文件内容如下:
<?php
$client= new GearmanClient();
$client->addServer('127.0.0.1', 4730);
echo $client->do('reverse', 'Hello World!'), "\n";
?>
运行client:
php client.php
输出:!dlroW olleH
出于方便的考虑,Worker,Client使用的都是PHP,但这并不影响演示,实际应用中,你完全可以通过Gearman集成不同语言实现的Worker,Client。或许此时你还想了解前面提到的负载均衡功能:很简单,只要增加多个Worker即可,你可以按照worker.php的样子多写几个类似的文件,并设置不同的返回值用以识别演示效果。然后依次启动这几个Worker文件,并多次使用client.php去请求,你就会发现Job会把Client请求转发给不同的Worker。
命令行工具
如果你觉得安装PHP之类的东西太麻烦的话,你也可以仅仅通过命令行工具来体验Gearman的功能:
启动Worker:gearman -w -f wc -- wc -l &
运行Client:gearman -f wc < /etc/passwd
分享到:
相关推荐
* v2版本:发展历程-v2版本,业务指标为提高可靠性的保证,解决方案为引入分布式队列Gearman和负载调度器Dispatcher。 总结: 藏经阁-360病毒样本大规模异构实时扫描平台是基于阿里云的实时扫描平台,旨在实时对...
**Gearman**是一种分布式任务调度框架,主要用于跨机器或者同一机器上的不同进程之间分发任务。它允许开发者将任务分解并分配给一组工作节点(worker),从而实现高效的任务处理。Gearman的核心优势在于其灵活性和可...
Gearman是一款开源的分布式任务队列系统,它允许应用程序在多台机器上分发工作负载,从而实现异步处理和负载均衡。...使用Gearman Java客户端,开发者可以轻松地在Java应用中利用这些功能,实现高效的任务调度和执行。
4. **Server**:Gearman 服务器,负责调度任务到合适的 Worker 上执行。 ### Gearman Java APIs 在 Java 中,我们可以使用 `libgearman-java` 库来与 Gearman 进行交互。这个库提供了客户端和工作者接口,让我们...
Gearman 是一个跨语言的、通用的任务调度框架,它可以将任务分发到多台服务器上,使得大规模应用可以有效地利用系统资源。 ### Gearman 的核心概念 1. **Worker**:工作进程,负责接收并执行 Gearman 服务器分发的...
Gearman是一个开源的、跨平台的作业调度系统,允许分布式环境中的应用通过简单的API进行通信。它提供了一个通用的后台任务处理框架,可以处理那些耗时较长或不适合在HTTP请求上下文中执行的任务,如邮件发送、数据...
GearMAN是一个高效的分布式任务框架,最初设计用于解决Web2.0环境中图片处理等耗时任务的快速分配和执行问题。它的名字来源于“Generic Worker Manager”,意在成为一个通用的任务分发工具。GearMAN通过将任务分配给...
Gearman 是一个分布式任务分发调度框架,支持多语言、并发的任务执行,支持负载均衡。其主要特点包括: 1. 开源:Gearman 是一个开源的任务调度系统,这使得其可以被自由地使用和修改。 2. 支持多语言接口:Gearman...
总之,Java Gearman Service 0.6.6 是一个强大的工具,它让Java开发者能够充分利用Gearman的工作队列系统,构建出高效、可靠的分布式应用。通过合理的任务调度和异步处理,它可以帮助你优化系统性能,应对高并发和大...
- **使用场景**:例如,可以将耗时的计算操作或数据处理任务交给 Gearman,而 MySQL 仅负责数据存储和任务调度。 - **API 接口**:提供了一系列的 SQL 函数,如 `gearman_do`、`gearman_status` 等,供 SQL 查询...
总之,`gearman-1.0.2.tgz` 是 Gearman 分布式任务队列系统的一个版本,提供了在多台机器上异步处理任务的能力,通过其源代码,开发者可以深入了解其工作原理,定制和优化任务调度策略,以满足特定的业务需求。
Gearman是一种开源的分布式任务队列系统,它允许应用程序在多台机器上分发工作,以便充分利用计算资源,实现负载均衡和高可用性。在Java环境中,我们可以利用Gearman库来构建分布式工作流程,实现任务的异步处理和...
齿轮人(Gearman)是一个开源的工作队列系统,它的主要目标是解耦应用程序的不同部分,使得分布式处理变得简单。 Gearman-0.8.0.tgz 是一个包含齿轮人0.8.0版本源代码的压缩包文件。下面将详细探讨齿轮人(Gearman)...
为了解决这一问题,金山逍遥网提出了一种基于Gearman分布式计算框架的DIPS(Distributed Image Processing System)分布式图片处理平台。该平台旨在通过合理分配服务器资源,特别是那些CPU利用率较低但具备较高计算...
Gearman是一个开源的、跨平台的任务分发系统,它允许应用程序在分布式环境中将工作分解成可并行执行的任务。PHP通过使用Gearman扩展,可以方便地与Gearman服务器通信,实现任务的分发和处理。本文将详细介绍如何在...
Gearman 的服务器组件是 `gearmand`,它负责接收、调度和分发任务。在 Debian 或 Ubuntu 上,可以使用 apt 包管理器进行安装: ``` sudo apt-get update sudo apt-get install gearmand ``` 安装完成后,你...
Yii2队列扩展与RabbitMQ的集成,使得开发者可以利用其强大的消息路由、交换机和绑定机制,构建可扩展和可靠的分布式系统。 4. **Beanstalkd队列**:Beanstalkd是一个轻量级的、高性能的、基于优先级的队列服务。在...
Client负责提交任务,Job Server负责调度任务给合适的Worker,而Worker则执行任务并将结果返回给Client。所有这些组件之间的通信都是基于TCP连接的。 安装Gearman通常涉及以下几个步骤: 1. 安装Gearman服务:在...
Gearman 是一个通用的工作队列系统,它为分布式环境提供了灵活的异步任务处理能力。Jobserver 是 Gearman 的一个实现,它允许开发者将任务分发到一组工作服务器上,以执行耗时或复杂的操作,而不会阻塞主线程。 **2...