本页使用了标题或全文手工转换

Gearman

维基百科,自由的百科全书
跳到导航 跳到搜索
Gearman
Gearman80 title.gif
原作者布莱德·菲兹派翠克
开发者Brian Aker, Eric Day
初始版本2009年1月8日 (2009-01-08)
稳定版本
1.1.14
(2016年11月17日,​5年前​(2016-11-17
编程语言C, Shell, Perl, PHP, Python, Java, MySQL, JMS, C#, .NET, Go
操作系统Linux, Windows (no server)
语言英语
许可协议BSD授权条款
网站gearman.org

Gearman [1] 是一套用来把程序需求委派给机器,提供通用的程序框架来将任务分发在机器上进行运算。它同时具备并发工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。

Gearman 特点[编辑]

  • Open Source: 属于开放源代码,同时,创建社群提供问题的协助平台。
  • Multi-language: 多国语言接口。
  • Flexible: 灵活,不需要设计其他模式,可以快速将应用程序分布运作。
  • Fast: 它有简单的协议,减少执行没有相关的时间。
  • Embeddable: 嵌入式,快速与轻量,处理各种应用程序。
  • No single point of failure: 不仅可以将系统模块化,也能容错方式进行。
  • No limits on message size: 支持单一消息 4 gig 大小。
  • Worried about scaling: 各平台行皆有使用经验,e.g. Tumblr, Yelp, Etsy, etc.

Gearman 运作原理[编辑]

Gearman 主要分成三个部分,需求的处理过程涉及三个角色:Client -> Job -> Worker。

Client[编辑]

  • Client: 负责创建一个工作,发送需求 (application) 给 Job Server,而 Job Server 会去找适合的 Worker 去转发工作。

Job Server[编辑]

  • Job Server: 了解 Client 端的需求,并查看哪个机器可以处理这项要求,在系统里它通常会是个 Daemon。

Work[编辑]

  • Worker: Worker 通过 Job Server 的分派,开始执行 Client 端的工作。

Message Queue[编辑]

  • 执行 Message Queue [2]服务的 Job Server 可以是多台服务器组成,也就是分布式架构,在 Job Server 上执行 Worker 程序。
  • 这些 Worker 程序会一直循环地等候,直到 Job Server 调用它执行工作。
  • Client 端发提交需求之后,会将需要的资料及动作记录在 Job Server 上,这时 Job Server 会查看是否有空闲并符合需求的 Worker。
  • 在 Worker 结束工作后,会发送通知给 Job Server ,这时 Job Server 就会视状况把结果回传给 Client。
  • Client 端不需等候需求的执行结果,可以直接继续执行其他动作。

Job Server 负载方式[编辑]

  • 当 Client 可能同时发出多个需求给 Job Server,由 Message Queue 接手进行队列。
  • 而 Job Server 开始处理多个需求,若其中一个发生问题,可以 Failover 到其他的机器。
  • 同时,Worker 会将多个需求一起进行运算,再看是同步或异步模式,回传结果给 Client。

同步 (Synchronous)[编辑]

  • 同步(Synchronous) 是指 Client 将需求 (Application) 丢给 Gearmand。
  • 由 Gearmand 分派 Job 给各 Worker 去处理。
  • 并同步 Response 回传给 Gearmand 告诉 Client 现在进度。

异步 (Asynchronous)[编辑]

  • 异步 (Asynchronous) 是指 Client 将需求 (Application) 丢给 Gearmand。
  • 由 Gearmand 分派 Job 给各 Worker 去处理。
  • Worker 处理完毕后,才会将结果回传给 Gearmand 告诉 Client 现在进度。

参考资料[编辑]

  1. ^ What is Gearman. [2014-01-20]. (原始内容存档于2020-12-07). 
  2. ^ Message Queue. [2014-01-20]. (原始内容存档于2014-01-31).