Gearman框架的研究(一)

以下内容来自www.geraman.org

1.Gearman介绍

Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。Gearman是一个分发任务的程序框架,可以用在各种场合,Gearman的提供了一个通用框架,它可以让你做的工作并行,负载平衡处理,并调用函数语言之间。它可用于在各种各样的应用中,从高可用性的Web站点的传输数据库复制事件,换句话说,它是分布式处理的中枢神经。

2.Gearman的优势

 

(1)开源 - 它是免费的!Gearman有一个活跃的开源社区,很容易涉足如果您需要帮助或想贡献。

(2).跨语言-有利于多语言多系统之间的集成。PHP/Perl/Java/C++可以融合在一起,用Perl实现的邮件发送功能PHP也能自由调用,也可以使用Perl调用另一台服务器上用C++编写的程序的一个函数。

(3).灵活 - 不依赖于任何特定的设计模式。您可以快速地放在一起的分布式应用程序使用任何你选择的模型,;例如Map / Reduce。

(4).速度快 - Gearman的一个新的优化服务器C到您的应用程序的开销降到最低,有一个简单的协议和接口。

可嵌入 - ,由于Gearman是快速,轻巧,它是非常适合各种规模的应用。利用了c最小化的减少了系统开销。

(5).Gearman的无单点故障 - 不仅有利于规模的系统,但在容错的方式可以做到这一点

3.Gearman是如何工作的

 

 

Gearman的应用程序由三部分组成:一个客户端,一个工人,作业服务器。

         客户端负责创建一个作业来运行,并把它发送到作业服务器。

         作业服务器会找到一个合适的工人,可以运行的工作和转发工作。

         工人执行工作由客户端请求,并通过作业服务器向客户端发送一个响应。

Gearman的提供客户端和工人的API,您的应用程序调用的Gearman作业服务器(也被称为gearmand)谈,所以你不需要处理网络或映射的就业机会。在内部,Gearman的客户端和工人的API沟通与作业服务器使用TCP套接字。为了解释Gearman是如何工作的更多细节,让我们来看看一个简单的应用程序,将一个字符串中的字符的顺序颠倒。例如在PHP中,虽然其他的API将看上去非常相似。

 

我们开始写是负责送工作,并等待结果,所以可以把它打印出来的客户端应用程序。为此,它通过使用Gearman的客户端API,发送一些数据相关的一个函数名,在这种情况下,“反向”功能.

(1). 客户端请求代码:

 

# Reverse Client Code
$client= new GearmanClient();
$client->addServer();
print $client->do("reverse", "Hello World!");

 

(2).worker端代码

 

# Reverse Worker Code
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("reverse", "my_reverse_function");
while ($worker->work());
 
function my_reverse_function($job)
{
  return strrev($job->workload());
}

 

 (3).具体的工作流程

 

4.Gearman的另一个途径就是可以用一个单独的机器(或机器集群),更适合做的工作是把工人代码。说你的PHP Web应用程序想要做图像转换,但处理Web服务器的机器上运行它,这实在是太多了。相反,你可以运送图像一组单独的worker机器做转换,这样的负载不影响您的Web服务器的性能和其他的PHP脚本。通过这样做,你还可以得到一个自然形式的负载平衡,因为作业服务器只发送新的就业机会闲散人员。如果一个给定的机器上运行的所有工人都很忙,你不必担心被送到那里的新的就业机会。这使得规模多核服务器很简单:你有16个内核的辅助计算机上?启动你的工人16个实例(或者更多,如果他们没有CPU限制)。这也是扩大你的工作池,只是引导他们,安装辅助代码,将它们连接到现有的作业服务器无缝地添加新的机器。

猜你喜欢

转载自prettyzhou.iteye.com/blog/1855096