跳至內容

Gearman

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
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 [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).