Gearman
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此條目需要補充更多來源。 (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).