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

Gearman
原作者布莱德·菲兹派翠克
开发者Brian Aker, Eric Day
首次发布2009年1月8日 (2009-01-08)
编程语言C, Shell, Perl, PHP, Python, Java, MySQL, JMS, C#, .NET, Go
操作系统Linux, Windows (no server)
语言英语
许可协议BSD授权条款
网站gearman.org

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).