`
freespace
  • 浏览: 180320 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Gearman分布式远程过程处理框架

阅读更多

作者:老王

 

通过Gearman,可以将一些复杂的任务交给其他系统进行异步处理。

通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用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

 

摘录自:http://hi.baidu.com/thinkinginlamp/blog/item/ff49972b9e7378f3e6cd40aa.html,我对内容进行了改动。

92547-3G025-183H1-1PF3A-JYS8N-K87N6

分享到:
评论

相关推荐

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

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

    gearman-ruby:官方! 用于Gearman分布式作业系统的Ruby库

    这是用于分布式作业系统的纯Ruby库。 需要做什么? 更多测试,一些代码清除。 这到底是什么 目前,该库对Ruby应用程序具有客户端和工作程序支持。 入门 客户 一个非常简单的客户端,它提交“睡眠”作业并等待100秒...

    gearman 文档

    2. **异步任务处理**:Gearman支持异步任务处理机制,可以在任务执行过程中继续处理其他任务,提高了系统的吞吐量。 3. **高可用性**:通过多个Gearman Server实例,可以构建高可用的服务集群,确保即使部分节点故障...

    Gearman C# API和示例

    Gearman 是一个分布式任务队列系统,它允许应用程序在多台服务器之间分发工作负载,以提高处理效率和可扩展性。在这个“Gearman C# API和示例”项目中,我们将探讨如何使用C#语言与Gearman进行交互,以及如何在...

    Gearman环境搭建资料

    总之,Gearman提供了一种灵活的框架,用于在分布式环境中处理任务,通过合理配置和使用,能够有效地提高系统的并发处理能力和响应速度。搭建和维护Gearman环境需要对Linux系统、网络编程以及相关库有一定的理解,但...

    GearMAN讲解及所带来的变革

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

    Laravel开发-laravel-gearman-rpc

    本篇文章将深入探讨如何在Laravel项目中集成Gearman,构建RPC(远程过程调用)系统,以便于实现高效、可扩展的任务处理。 ** Gearman 概述 ** Gearman是一个开源的、跨平台的作业调度系统,允许分布式环境中的应用...

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

    在Java环境中,我们可以利用Gearman库来构建分布式工作流程,实现任务的异步处理和并行执行。 首先,我们需要了解Gearman的基本概念。它主要由三部分组成:Job Server、Workers和Clients。Job Server是核心,负责...

    gearman-mysql-udf-0.6.tar.gz

    这个插件使得 MySQL 数据库可以直接与 Gearman 服务进行交互,扩展了 MySQL 的功能,使其能够利用 Gearman 的分布式处理能力。 1. **Gearman 基础知识**: - **概念**:Gearman 是一种开源软件,设计用于负载均衡...

    Laravel开发-php-gearman

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

    Gearman java APIs和一个小Demo

    Gearman 是一个分布式任务队列系统,它允许应用程序在需要时分发工作负载,并在有可用资源时异步处理这些工作。在Java中,我们可以利用 Gearman 的客户端库来与 Gearman 服务器进行交互,执行分布式任务。本篇文章将...

    gearman-1.0.2.tgz

    Gearman 是一个开源的分布式任务队列系统,它允许应用程序将耗时的任务分发到多台机器上异步处理,从而提高系统的响应速度和整体性能。`gearman-1.0.2.tgz` 是 Gearman 的一个特定版本,即 1.0.2 版本的源代码压缩包...

    gearman下载gearman下载

    Gearman是一款开源的分布式任务队列系统,它允许应用程序在多台机器上分发工作负载,从而实现异步处理和负载均衡。这个系统的重点在于解耦任务的发起者和执行者,使得系统能够灵活地扩展并提高处理能力。在本讨论中...

    net_gearman-master.zip

    在PHP的世界里,Gearman是一个强大的分布式任务处理框架,它允许开发者将任务分发到多台服务器上执行,从而实现负载均衡和异步处理。本文将深入探讨net_gearman-master.zip,这是一个专为PHP设计的Gearman客户端插件...

    Gearman Worker实例 C++ vs2008

    Gearman是一个分布式任务队列系统,它允许应用程序将工作分发到多个服务器或进程,以实现负载均衡和异步处理。在本实例中,我们关注的是如何在C++环境中,利用Visual Studio 2008(VS2008)在Windows平台上创建一个...

    Gearman PHP Extension

    Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于...

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

    Gearman是一个工作负载分发服务器和库,允许将工作分散到多个机器或者机器上的多个核心上进行异步处理。它在Web应用程序中处理耗时的后台任务时尤其有用,如文件上传、邮件发送、图片处理等。 2. PHP Gearman扩展...

    Gearman中文手册,Gearman中文详解,gearman手册chm

    Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。

    Gearman安装相关资源

    Gearman 是一个开源的分布式任务队列系统,它允许应用程序将工作分解成可并行执行的任务,从而提高处理效率和响应速度。这个系统的核心组件是 Gearmand 服务器,它接收任务,分配给客户端,并管理任务的执行状态。...

    pecl-gearman:libgearmanPHP包装器

    `pecl-gearman`是PHP扩展,用于与libgearman库交互,它提供了一个高效且功能丰富的接口,使得PHP开发者可以充分利用Gearman分布式任务处理系统。这个扩展的核心目标是让PHP能够无缝地利用Gearman的并行计算能力,...

Global site tag (gtag.js) - Google Analytics