Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7112304
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2013-01-12 21:13:04

Gearman是一个分发任务的程序框架,可以用在各种场合,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资 源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。

Gearman框架中一共有三个角色:
  1. Client: 提交任务的人。创建需要被执行的job然后发送给Job Server。
  2. Worker: 真正干活的人。向Job Server注册然后从Job Server处拿活干, PHP, Ruby, Java等流行软件进行编写。
  3. Job Server:传说中的manager。接收client提交的Job,分发给相应的worker。并能在worker出现异常时重新派发job。
job,worker的工作流程:
  1. Worker通过CAN_DO消息,注册到Job server上。
  2. 随后发起GRAB_JOB,主动要求分派任务。
  3. Job server如果没有job可分配,就返回NO_JOB。
  4. Worker收到NO_JOB后,进入空闲状态,并给Job server返回PRE_SLEEP消息,告诉Job server:”如果有工作来的话,用NOOP请求我先。”
  5. Job server收到worker的PRE_SLEEP消息后,明白了发送这条消息的worker已经进入了空闲态。
  6. 这时如果有job提交上来,Job server会给worker先发一个NOOP消息。
  7. Worker收到NOOP消息后,发送GRAB_JOB向Job server请求任务。
  8. Job server把工作派发给worker。
  9. Worker干活,完事后返回WORK_COMPLETE给Job server。

值得注意的是,第6步中,Job server会给每个发送过PRE_SLEEP消息的worker都发送NOOP 消息,哪个worker先进入到第7步,即哪个worker发送的GRAB_JOB最先被Job server收到,那么这个job就被派发到哪个worker。这一点可以在worker端实现时利用起来,以控制任务的派发策略。也就是说,我们可以通 过自定义worker端的请求策略的方式来达到自定义job分派策略的目的。

Gearman的特性

通过Gearman分布式任务分发框架自然而然地便可以搭建一个分布式计算集群,从这点来说把Gearman称作是分布式计算框架也未尝不可,whatever,只要我们理解了原理,叫什么都无所谓啦。

Geraman宣称的有:开源、多语言支持、富有弹性、高效、易于嵌入和无单点失败。开源和多语言支持毋须多言,其他几个特性需要分别说明一下。




Gearman 分布式任务实现原理上只用到2个字段,function name和data。function name即任务名称,由client传给job server, job server根据function name选择合适的worker节点来执行。data通常为执行任务所需的自定义的内容,比如简单的做法可以把需要执行的脚本当成data即可(当然要注 意其中的安全防范)。如果有多个worker可以处理同一个function name, 则job server会自动分配一个。当用于远程监控场景时,我们可以让每个worker注册成不同的业务名称,以达到方便控制每台worker节点的目的。



阅读(473) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~