【介绍】
Gearman 是 Brad Fitzpatrick 的一个作品,用 Perl 写的任务调度程序,提供一个服务器端和多种语言的客户端接口,包括 C/Perl/Python/Ruby 等,在 client library 本身就支持一定程度的高可靠度。
Gearman系统用来把工作委派给其他机器,分布式的调用更适合做某项工作的机器,并发的做某项工作,在多个调用间做负载均衡,或用来在调用其它语言的函数。
工作原理图:
工作流:
集群架构:
【Gearman使用简介】
Gearman1月16日发布了c语言的0.2 版本,gearman提供了一个work传递其他机器,或者调用其他机器功能的框架,通过gearman你可以实现并行的工作,负载均衡处理,调用其他语言的函数。它可以应用在多种场合,从高可用性的web服务到数据库复制,换句话说,它是分布式处理的中枢神经。gearman早期是sixpart实现的perl语言开发的版本,名字来源于"Manager",这一框架只负责分发要做的工作,本身并不做任何实际的工作。(这点与spread toolkit相同 译者注)。
怎样使用 Gearman?
一个简单的gearnan的体系包括三个部分,一个client,一个worker,一个job server,client负责创建并发起一个job请求,job server负责找到合适的worker,worker当然就是负责执行job,事实上是worker完成了实际的任务。gearman提供一个api从而你的client与worker能够与job server通信。我们来看一个简单的gearman应用实例。这一实例只完成一个功能,将一串字符串reverse。
首先我们要写一个client, “reverse_client”,代码实际上就是负责发起job请求,并返回结果。代码实际上就是连接job server,并发起一个请求 reverse函数,代码部分如下:
gearman_client_create(&client);
gearman_client_add_server(&client, "127.0.0.1", 0);
result= gearman_client_do(&client, "reverse", "Hello world!",
strlen("Hello world!"), &result_size, &ret);
这段代码首先初始化一个client实例,配置并连接一个本地的job server ,然后发起了一个reverse的请求,参数是 "Hello world!"函数名称与参数,这些与gearman的要求一致。现在gearman的将这个请求数据打包发给job server,job server会自动寻找合适的worker来执行。
让我们来看看worker的代码:
void *reverse_function(gearman_job_st *job, void *cb_arg,
size_t *result_size, gearman_return_t *ret_ptr)
{
const uint8_t *workload;
uint8_t *result;
size_t x;
size_t y;
workload= gearman_job_workload(job);
*result_size= gearman_job_workload_size(job);
result= malloc(*result_size);
for (y= 0, x= *result_size; x; x--, y++)
result[y]= workload[x - 1];
*ret_ptr= GEARMAN_SUCCESS;
return result;
}
gearman_worker_create(&worker);
gearman_worker_add_server(&worker, "127.0.0.1", 0);
gearman_worker_add_function(&worker, "reverse", 0, reverse_function, NULL);
while (1) gearman_worker_work(&worker);
这段代码定义了一个函数“reverse_function” ,这个函数接收一个字符串,然后反向这个字符串的顺序,并且用一个worker的实例向job server注册了一个reverse函数。
当job server收到请求reverse的时候,就会传递相关的数据给这个worker,worker会执行reverse_functio,将执行结果返回job server,最后传递给初始请求者。
实际上client与worker提供了job管理系统的交互与管理的大部分工作,你需要做的不过是完成client与worker的部分代码。在这一版本的examples目录下,提供了以上这个例子。
gearman都能用来干什么?
gearman可以用在各个方面,最简单就是在不同语言之间架起一座桥梁。比如你可能希望你的php程序调用一个c 函数,那么用gearman就可以实现了,当然了实际你可以通过写一个php扩展来实现同样的工作,但是比如你要php调用java,perl,或者python那么,gearman就非常棒了。
gearman另一个应用方面是负载分担,你可以将worker放在不同的服务器(或者一些列服务器)上,比如你的php程序需要图片转换,但是不希望本地服务器有太多的这样图片转换的进程,那么你可以建立一系列服务器,在上面加载worker处理图片转换。这样你的web服务器将不受图片转换的影响,同时你得到了负载均衡的功能,因为job server会在请求到来的时候,将这个请求发给空闲的worker.同样对于多核的服务器,你可以在同一机器上创建同样数目的worker.你可能担心,job server处于一个中心,那么这会是一个单点的瓶颈,如果死了,会怎么样?对于这样的情况,你可以运行多个job server。这样如果一个job server down了,client和worker会自动迁移到另一台job server上。
【相关链接】
项目主页:http://www.danga.com/gearman/
相关主页:http://www.gearman.org
参考文档:http://www.gearman.org/doku.php?id=documentation
digg.com在使用gearman: http://highscalability.com/digg-architecture
中文介绍:http://www.maycode.com/index.php/linux/34-linuxbase/1295-spread.html
文章参考链接:
http://approach.iteye.com/blog/367393
http://blog.gslin.org/archives/2009/01/10/1924/
http://hi.baidu.com/buptflybird/blog/item/0e134bd34786edd8a8ec9a19.html
分享到:
相关推荐
java-gearman-service-0.6.6.zip 包,gearman分为3部分,client - server - worker,创建 java 版本的client和worker部分。 其实在gearman中,client和worker的编写不复杂,但是不同厂商提供的API是不大相同的,本...
java实现gearman的job实现的jar包,包括gearman server,client和work客户端API
Gearman 的 MySQL 插件
gearman的java库有两个,一个是gearman service ,一个是gearman java,相比来说service版本更好用一些,并且网上的教程一般是用的这个版本。因此我打好了gearman service的包提供给需要的开发者使用。
java实现gearman的job实现的jar包,包括gearman server,client和work客户端API
gearman-1.0.2.tgz gearman-1.0.2.tgz
gearman-java-0.03,这是一个有关gearman-java-0.03相关的java源代码
Laravel开发-laravel-gearman-rpc Laravel/Lumen Gearman RPC。基于https://github.com/mhlavc/gearman
gearman java 0.6.6版本 java-gearman-service-0.6.6.jar
gearman-0.8.0.tgz
gearman-0.5.0.tgz(在使用)
齿轮工分布的工作 熟悉Gearman的分布式工作
php的gearman客户端插件 net_gearman-master.zip
资源分类:Python库 所属语言:Python 资源全名:gearman-1.3.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Gearman-Go 是 Gearman-API 的 Go 语言封装版本,示例代码:Worker:// Limit number of concurrent jobs execution. // Use worker.Unlimited (0) if you want no limitation. w := worker.New...
资源分类:Python库 所属语言:Python 资源全名:gearman-2.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
1)软件资源列表:《gearmand-1.1.12.tar.gz》,《gearman-1.1.2.tgz》。 2)安装操作系统环境:CentOS-6.5,(其它linux操作系统请自行尝试)。 3)本软件安装步骤详解:...
Gearman-Go 该模块是用于的 API。 该协议是用纯Go语言编写的。 它包含两个子包: 客户端软件包用于将作业发送到Gearman作业服务器,并从服务器获取响应。 "github.com/mikespook/gearman-go/client" 辅助软件包将...
Gearman-ruby 这是什么? 这是用于分布式作业系统的纯Ruby库。 需要做什么? 更多测试,一些代码清除。 这到底是什么 目前,该库对Ruby应用程序具有客户端和工作程序支持。 入门 客户 一个非常简单的客户端,它...
实测可用