`

利用Gearman,搭建异步分布式计算平台

阅读更多

Gearman的介绍

主页在http://gearman.org/index.php, 它的主要优点有:
1. 实现了异步计算。可以将比较耗时的计算分配到分布式计算集群来减少站点服务器的压力和用户的等待。例如passport里的邮件发送/头像上传裁减/国内外数据分离请求等等。
2. 跨语言,有利于多语言多系统之间的集成。PHP/Perl/Java/C++可以融合在一起,用Perl实现的邮件发送功能PHP也能自由调用,也可以使用Perl调用另一台服务器上用C++编写的程序的一个函数。
3. 便于扩展和实现负载均衡。可以通过增加worker的数量来提供更好的性能,在其中一台出现问题的时候能够由其他的worker来完成任务。
4. 开源
5. 快速: 利用了c最小化的减少了系统开销。

 

Gearman的安装配置

1.安装Gearman server and library:


wget http://launchpad.net/gearmand/tr ... gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install


2.安装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


3.编辑php.ini配置文件加载相应模块并使之生效:

extension = "gearman.so"

4.启动Job:

gearmand -d

如果当前用户是root的话,则需要这样操作:

gearmand -d -u root

缺省会使用4730端口,下面会用到。

以调试的方式启动:

gearmand -vv

5.编写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 &

6.编写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

 
可能遇到的问题
 
[xhtml] view plaincopy
  1. Couldn't find uuid/uuid.h  
解决办法:在新立得里搜索并安装uuid-dev。

 
[xhtml] view plaincopy
  1. gearmand: error while loading shared libraries: libgearman.so.1: cannot open shared object file: No such file or directory  
libgearman.so一般是在 /usr/local/lib下,看看/etc/ld.so.conf是否包含这个目录,执行/sbin/ldconfig -v刷新一下。

 
[xhtml] view plaincopy
  1. Fatal error: Class 'GearmanWorker' not found  
 
 是否在cli的php.ini下加入“extension="gearman.so"”这一行配置。
Gearman与Perl

安装Gearman模块,使用Gearman::Worker和Gearman::Client模块即可。
具体编码方式可参考cpan。
需要注意的是$client->do_task()方法返回的是一个reference。
下面是例子。
worker.pl
  1. use Gearman::Worker;  
  2. my $worker = Gearman::Worker->new;  
  3. $worker->job_servers('127.0.0.1:4730');  
  4. $worker->register_function("reverse",  /&test);  
  5. $worker->work while 1;  
  6.   
  7. sub test {  
  8.     return join(' '$_[0]->handle, $_[0]->arg, 'world'"/n");  
  9. }  
client.pl
  1. use Gearman::Client;  
  2. my $client = Gearman::Client->new;  
  3. $client->job_servers('127.0.0.1:4730');  
  4.   
  5. # running a single task  
  6. my $result = $client->do_task("reverse""hello"); # return a scalar reference  
  7. print $$result;  
 
Gearman异步模式的实现
在Perl的Gearman::Client模块里已经实现了异步的方法,采用dispatch_background时client请求不会等待worker的响应就立即返回了。
分享到:
评论

相关推荐

    Gearman环境搭建资料

    Gearman是一种分布式任务队列系统,它允许应用程序在不同的服务器之间分发工作负载,从而实现负载均衡和异步处理。本篇文章将详细讲解如何在Linux环境中搭建Gearman,包括依赖库的安装和Gearman服务的配置。 首先,...

    gearman-mysql-udf-0.6.tar.gz

    Gearman 是一个分布式任务队列系统,它允许应用程序在需要时分发工作并异步处理结果。这个名为 "gearman-mysql-udf-0.6.tar.gz" 的压缩包包含了一个 Gearman 与 MySQL 结合使用的用户定义函数(UDF)插件,版本为 ...

    PHP使用gearman进行异步的邮件或短信发送操作详解

    本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下: 一、准备工作 1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。 2、使用gearmanManager来管理...

    gearman 文档

    Gearman作为一种强大的集群计算框架,通过其灵活的任务调度机制和高效的异步处理能力,能够有效提升系统的性能和可扩展性。无论是在大型社交平台如LiveJournal的应用场景下,还是在各种高性能计算环境中,Gearman都...

    Gearman C# API和示例

    Gearman 是一个分布式任务队列系统,它允许应用程序在多台服务器之间分发工作负载,...通过学习和使用这个项目,你可以更好地理解和利用Gearman在分布式系统中的优势,提升你的应用在高并发和大规模数据处理时的能力。

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

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

    Laravel开发-php-gearman

    综上所述,Laravel 结合 PHP Gearman 提供了一个强大而灵活的解决方案,用于处理异步任务和分布式计算,极大地提升了系统的整体性能和可靠性。在实际开发中,根据项目需求,可以灵活地调整任务处理策略,实现高效的...

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

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

    Laravel开发-laravel-gearman-rpc

    在现代Web开发中,异步任务处理和分布式计算已经成为提升系统性能的关键技术。Laravel作为PHP的流行框架,提供了丰富的工具来支持这类需求。本篇文章将深入探讨如何在Laravel项目中集成Gearman,构建RPC(远程过程...

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

    在介绍PHP使用Gearman进行任务分发操作的过程中,有几个关键知识点需要详细阐述: ...掌握了这些知识点后,开发者可以有效地利用Gearman解决Web应用中的长耗时任务处理问题,提高应用性能和用户体验。

    GearMAN讲解及所带来的变革

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

    Gearman java APIs和一个小Demo

    在Java中,我们可以利用 Gearman 的客户端库来与 Gearman 服务器进行交互,执行分布式任务。本篇文章将深入探讨 Gearman 的 Java APIs,并通过一个小 Demo 展示其用法。 ### Gearman 的基本概念 1. **Worker**:...

    gearman下载gearman下载

    在实际应用中,Gearman可以广泛应用于大数据处理、后台任务执行、实时计算等场景,通过其强大的异步处理能力和分布式特性,提升系统的响应速度和可扩展性。使用Gearman Java客户端,开发者可以轻松地在Java应用中...

    Gearman Worker实例 C++ vs2008

    在本实例中,我们关注的是如何在C++环境中,利用Visual Studio 2008(VS2008)在Windows平台上创建一个Gearman Worker。 首先,理解Gearman Worker的角色至关重要。Worker是执行由Job Server分发的任务的程序。当...

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

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

    net_gearman-master.zip

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

    基于非关系数据库的分布式负载均衡技术.pdf

    异步计算是分布式计算的一种实现方式,它允许计算任务在不同的时间或不同的节点上执行,而不需要立即反馈结果。这样可以在处理大量数据和长时间任务时,避免资源的浪费,提高系统的效率。Gearman是一个开源的框架,...

    gearman-java.zip_BadMagicException_Gearman java

    Gearman是一个分布式任务队列系统,它允许应用程序在任何地方运行任务,而无需关心它们在哪里运行或如何运行。Gearman-Java是Java语言对Gearman的客户端库,它提供了与Gearman服务器通信的能力,用于分发工作负载...

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

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

Global site tag (gtag.js) - Google Analytics