Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

7,765

Gearman:分布式的任务分发框架

  • 2014-07-13
  • 暂无评论

Gearman是一个支持分布式任务分发框架。设计简洁,获得了非常广泛的支持。

项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,显然会有更好的用户体验。

为了实现类似的需求,Web项目中一般的实现方法是使用消息队列(Message Queue),比如MemcacheQ,RabbitMQ等等,都是很著名的产品。

消息队列说白了就是一个最简单的先进先出队列,队列的一个成员就是一段文本。正是因为消息队列实在太简单了,当拿着消息队列时,反而有点无从下手的感觉,因为这仅仅一个发送邮件的任务,就会引申出很多问题:

  1. 消息队列只能存储字符串类型的数据,如何将一个发送邮件这样的“任务”,转换为消息队列中的一个“消息”?
  2. 消息队列只负责数据的存放与进出,本身不能执行任何程序,那么我们要如何从消息队列中一个一个取出数据,再将这些数据转化回任务并执行。
  3. 我们无法预知消息队列何时会有数据产生,所以我们的任务执行程序还需要具备监控消息队列的能力,也就是一个常驻后台的守护进程。
  4. 一般的Web应用PHP都以cgi方式运行,无法常驻内存。我们知道php还有cli模式,那么守护进程是否能以php cli来实现,效率如何?
  5. 当守护进程运行时,Web应用能否与后台守护进程交互,实现开启/杀死进程的功能以及获得进程的运行状态?

Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。

它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。

Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。

总之,Gearman就是负责分发处理的中枢系统,它的优点包括:

  • 开源:Gearman免费并且开源而且有一个非常活跃的开源社区,如果你想来做一些贡献,请点击 。
  • 多语言支持:Gearman支持的语言种类非常丰富。让我们能够用一种语言来编写Worker程序,但是用另外一种语言编写Client程序。
  • 灵活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。
  • 快速:Gearman的协议非常简单,并且有一个用C语言实现的,经过优化的服务器,保证应用的负载在非常低的水平。
  • 可植入:因为Gearman非常小巧、灵活。因此您可以将他置入到现有的任何系统中。
  • 没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失败。

一个典型的Gearman应用包括以下这些部分:

  • Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台
  • Gearman Client:可以理解为任务的收件员,比如我要在后台执行一个发送邮件的任务,可以在程序中调用一个Gearman Client并传入邮件的信息,然后就可以将执行结果立即展示给用户,而任务本身会慢慢在后台运行。
  • Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。

gearman

Job Server 可以开启多个实例,这样在其中一个发生故障的时候,可以 Failover 到其他的机器上。同时 Worker 也可以是多个实例进行运行。

gearman1

目前分布式计算框架大多都是基于:Map/Reduce
下面看一张Gearman的结构图,首先Gearman很容易整合进分布式计算
gearman2
并且也可以用2层Job和Worker来实现分布式计算,Worker分别实现Map任务及Reduce即可
Map/Reduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(化简)".
简单来讲,就是给大量的输入的 key/value 的键值对 reduced 成少量的key/value 的键值对。

总结:
Gearman适合于那种task数量远远大于worker数量的应用。
理论上来看,将计算开销转移到Worker上,从而实现任务的并发执行,表现为client计算负载减轻,用户的等待时间减少。
提供一种相对简单的方式来实现异步任务,对于分布式计算也提供了基本的框架支持,但也仅限于基础支持
就如同定义一样:分布式的任务分发框架


back up ↑

无觅相关文章插件,快速提升流量