mysql任务分发_任务分发系统gearman

1 Gearman是什么

Gearman Job Server@http://gearman.org/。

Gearman 是一个任务分发系统,它提供了一个分发框架,能够分发某类任务到更适合处理这类任务的服务器上去处理。并且,它支持任务并行处理、负载均衡以及多语言调用。它的适用范围很广,从高可用性的网站到透明的数据库复制等。换句话说,它是一个强健的分布式通信处理系统。下面是官网上列举的优点:Open Source- 开源。Gearman 是遵循BSD开源规范的免费程序。

Multi-language- 多语言支持。Gearman可以作为多语言通信的接口。你可以用一种语言分发任务给另一种语言处理。比如php通过gearm分发任务给c。

Flexible- 灵活性。使用它,不会让你必须遵循任何特定的设计模式。对于分布式的程序,你可以使用任何你想用的模式,比如Map/Reduce。

Fast- 迅猛。Gearman 使用非常简单的协议和接口,它是用C/C++实现的。

Embeddable- 易用性。又快又轻量,所以它适用于所有规模的程序。只需要做很小的改动,就可将其整合入已存在的功能中。

No single point of failure- 无单点故障。

No limits on message size- 通信消息大小无限。单个通信消息最大达4G。要是还不满足,gearman可以将消息分片传输。

Worried about scaling?- Don't worry about it with Gearman. Craig's List, Tumblr, Yelp, Etsy,… discover what others have known for years.

2 Gearman如何工作

使用Gearman的程序通常包含三个部分:Client,Worker和Job server。Client是负责创建任务并将其发送至Job server。Job server会选择一个合适的Worker,然后分发来处理这个任务。Worker负责处理任务并返回处理结果。Gearman系统提供了Client和Worker工作部分的API,使得客户端可通过它们与Job server交互。所以你不需要处理网络连接或者分发任务的工作。内部实现上,Client和Worker通过TCP socket与Job server通信。

8be48a1035459e5bc04b16225a373cca.png

了解更多的话,让我们先看一个例子:

这个例子将从Client端发送一个字符串至Job Server,而Worker会负责将字符串翻转并返回。

Client端代码:

# Reverse Client Code

$client= new GearmanClient();

$client->addServer();

print $client->do("reverse", "Hello World!");这段代码很简单,new个对象,添加Job Server(默认为本地服务器),然后调用reverse功能并打印返回结果。

Worker端代码:

# Reverse Worker Code

$worker= new GearmanWorker();

$worker->addServer();

$worker->addFunction("reverse", "my_reverse_function");

while ($worker->work());

function my_reverse_function($job)

{

returnstrrev($job->workload());

}这段代码也显而易见地吐血。也可知道Gearman用起来是多么简单。

自己实现一个功能,通过GearmanWorker::addFunction注册,并用work()来实现监听数据即可。

整个功能的流程就是这样的:

390c8a660d7c360d97e667d446709270.png

正如你所见,Gearman实现了任务管理以及网络通信,你只需要关注业务逻辑功能。你还可以创建后台任务以及优先级任务队列。更多内容可以参考Gearman文档。

3 Gearman用在什么地方

上面的例子好像费力不讨好,N行代码只出来一个“Hello World!”——还是倒着的。但是Gearman其实在很多情况很实用。

最简单的一种是,你可以使用Gearman作为不同程序语言之间的粘合剂。比如你希望你的php程序调用c的功能,那么php可以作为Client,c来提供Worker的处理功能,Job server和php/c API就可以作为中间的接口。当然你可以把c做成php的扩展,但是你还有可能想使用php Client 和 python Worker,或者mysql Client 和 perl Worker。你可以混合使用任意支持的语言。

另外一种情况是很容易实现Worker的分布式。比如php web程序需要处理图片的转换。这个转换是很耗cpu的,直接在php中做会影响web服务器的QPS。这个时候可以将图片的处理功能放到另外一组cpu强悍的机器上,从而实现物以至用。同时,Gearman也实现了Worker的负载均衡,新任务只会分发到空闲的机器上。

e5ec257deac0cfa30612e660031627ce.png现在你可能会关心Job Server如果宕了怎么办。答案是可以启动2-3台Job Server。如果其中一台无法正常工作了,请求将自动转移动另外可用的Job Server。

4 举个栗子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值