Gearman
外觀
此條目需要補充更多來源。 (2022年1月9日) |
原作者 | 布萊德·菲茲派翠克 |
---|---|
開發者 | Brian Aker, Eric Day |
首次發佈 | 2009年1月8日 |
程式語言 | 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 現在進度。
參考資料
[編輯]- ^ What is Gearman. [2014-01-20]. (原始內容存檔於2020-12-07).
- ^ Message Queue. [2014-01-20]. (原始內容存檔於2014-01-31).