`

分布式调度 gearman(转)

阅读更多
学学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


分享到:
评论

相关推荐

    藏经阁-360病毒样本大规模异构实时扫描平台.pdf

    * v2版本:发展历程-v2版本,业务指标为提高可靠性的保证,解决方案为引入分布式队列Gearman和负载调度器Dispatcher。 总结: 藏经阁-360病毒样本大规模异构实时扫描平台是基于阿里云的实时扫描平台,旨在实时对...

    gearman 文档

    **Gearman**是一种分布式任务调度框架,主要用于跨机器或者同一机器上的不同进程之间分发任务。它允许开发者将任务分解并分配给一组工作节点(worker),从而实现高效的任务处理。Gearman的核心优势在于其灵活性和可...

    gearman下载gearman下载

    Gearman是一款开源的分布式任务队列系统,它允许应用程序在多台机器上分发工作负载,从而实现异步处理和负载均衡。...使用Gearman Java客户端,开发者可以轻松地在Java应用中利用这些功能,实现高效的任务调度和执行。

    Gearman java APIs和一个小Demo

    4. **Server**:Gearman 服务器,负责调度任务到合适的 Worker 上执行。 ### Gearman Java APIs 在 Java 中,我们可以使用 `libgearman-java` 库来与 Gearman 进行交互。这个库提供了客户端和工作者接口,让我们...

    Laravel开发-php-gearman

    Gearman 是一个跨语言的、通用的任务调度框架,它可以将任务分发到多台服务器上,使得大规模应用可以有效地利用系统资源。 ### Gearman 的核心概念 1. **Worker**:工作进程,负责接收并执行 Gearman 服务器分发的...

    Laravel开发-laravel-gearman-rpc

    Gearman是一个开源的、跨平台的作业调度系统,允许分布式环境中的应用通过简单的API进行通信。它提供了一个通用的后台任务处理框架,可以处理那些耗时较长或不适合在HTTP请求上下文中执行的任务,如邮件发送、数据...

    GearMAN讲解及所带来的变革

    GearMAN是一个高效的分布式任务框架,最初设计用于解决Web2.0环境中图片处理等耗时任务的快速分配和执行问题。它的名字来源于“Generic Worker Manager”,意在成为一个通用的任务分发工具。GearMAN通过将任务分配给...

    gearman开源任务调度系统.pdf

    Gearman 是一个分布式任务分发调度框架,支持多语言、并发的任务执行,支持负载均衡。其主要特点包括: 1. 开源:Gearman 是一个开源的任务调度系统,这使得其可以被自由地使用和修改。 2. 支持多语言接口:Gearman...

    java-gearman-service-0.6.6.jar gearman java调度工具包

    总之,Java Gearman Service 0.6.6 是一个强大的工具,它让Java开发者能够充分利用Gearman的工作队列系统,构建出高效、可靠的分布式应用。通过合理的任务调度和异步处理,它可以帮助你优化系统性能,应对高并发和大...

    gearman-mysql-udf-0.6.tar.gz

    - **使用场景**:例如,可以将耗时的计算操作或数据处理任务交给 Gearman,而 MySQL 仅负责数据存储和任务调度。 - **API 接口**:提供了一系列的 SQL 函数,如 `gearman_do`、`gearman_status` 等,供 SQL 查询...

    gearman-1.0.2.tgz

    总之,`gearman-1.0.2.tgz` 是 Gearman 分布式任务队列系统的一个版本,提供了在多台机器上异步处理任务的能力,通过其源代码,开发者可以深入了解其工作原理,定制和优化任务调度策略,以满足特定的业务需求。

    gearman-distributed-job:熟悉Gearman的分布式工作

    Gearman是一种开源的分布式任务队列系统,它允许应用程序在多台机器上分发工作,以便充分利用计算资源,实现负载均衡和高可用性。在Java环境中,我们可以利用Gearman库来构建分布式工作流程,实现任务的异步处理和...

    gearman-0.8.0.tgz

    齿轮人(Gearman)是一个开源的工作队列系统,它的主要目标是解耦应用程序的不同部分,使得分布式处理变得简单。 Gearman-0.8.0.tgz 是一个包含齿轮人0.8.0版本源代码的压缩包文件。下面将详细探讨齿轮人(Gearman)...

    分布式图片处理平台解决方案

    为了解决这一问题,金山逍遥网提出了一种基于Gearman分布式计算框架的DIPS(Distributed Image Processing System)分布式图片处理平台。该平台旨在通过合理分配服务器资源,特别是那些CPU利用率较低但具备较高计算...

    php使用gearman进行任务分发操作实例详解

    Gearman是一个开源的、跨平台的任务分发系统,它允许应用程序在分布式环境中将工作分解成可并行执行的任务。PHP通过使用Gearman扩展,可以方便地与Gearman服务器通信,实现任务的分发和处理。本文将详细介绍如何在...

    gearman-cookbook:Gearman厨师食谱

    Gearman 的服务器组件是 `gearmand`,它负责接收、调度和分发任务。在 Debian 或 Ubuntu 上,可以使用 apt 包管理器进行安装: ``` sudo apt-get update sudo apt-get install gearmand ``` 安装完成后,你...

    Yii2队列扩展支持DBRedisRabbitMQBeanstalk和Gearman

    Yii2队列扩展与RabbitMQ的集成,使得开发者可以利用其强大的消息路由、交换机和绑定机制,构建可扩展和可靠的分布式系统。 4. **Beanstalkd队列**:Beanstalkd是一个轻量级的、高性能的、基于优先级的队列服务。在...

    PHP并发多进程处理利器Gearman使用介绍

    Client负责提交任务,Job Server负责调度任务给合适的Worker,而Worker则执行任务并将结果返回给Client。所有这些组件之间的通信都是基于TCP连接的。 安装Gearman通常涉及以下几个步骤: 1. 安装Gearman服务:在...

    Laravel开发-jobserver

    Gearman 是一个通用的工作队列系统,它为分布式环境提供了灵活的异步任务处理能力。Jobserver 是 Gearman 的一个实现,它允许开发者将任务分发到一组工作服务器上,以执行耗时或复杂的操作,而不会阻塞主线程。 **2...

Global site tag (gtag.js) - Google Analytics