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