簡介:
在如今網路發達的現代, 很多網路上面的服務有些是需要依賴電腦的計算能力, 而隨著計算量的增加, 有時候一台電腦是不夠的, 這時候我們就需要一個能夠幫助我們自動分配工作給其他電腦的方法。Gearman 提供了一個通用的框架讓我們能夠跟不同電腦或是不同的程序溝通, 他讓你可以把工作分散下去, 讓不同電腦同時幫你做運算, 也可以做到負載平衡, 對到分散式系統溝通的能力。對於一些網路服務, Gearman 提供簡單的解法來達到分散式運算的結果。
下面提供一些 Gearman 的特點:
- 負載平衡
- 提供 C, Perl, Python, PHP 等客戶端程式的 API
- 目前並沒有廣播的功能
- 自動分配工作
- 可以利用 MySQL 等 DataBase 來儲存工作序列, 讓服務就算重新啟動, 資料也不會不見
- blocking task invoke
- non-blocking (concurrent multi-task), callback function when complete or fail!
- worker
在下面這張圖,你可以知道 Gearman 是如何運作的,你的應用程式會運用 Gearman 提供的 API 來發送新的任務給 Gearman Job Server,Job Server 會找到目前最為閒置的工作結點,並且把任務發送給他, 交給他去完成, 等到他完成就會把結果回傳回來。所有的溝通都是透過 Gearman 所提供的 API, 你不需要去處理任何網路通訊的事情。所有的溝通都可以是在不同機器上發生的。

Job Server fail over:
為了達到如果有 Job Server 無法繼續運作, 而不影響到服務, 我們可以跑起多個 Job Server, 並且讓Client 和 Work Node 都連過去,這樣如果有一台 Job Server 掛掉, 至少還有其他台 Job Server 存在,可以繼續提供服務, 而不至於影響到整個服務。

缺點:
目前沒有一套可以監控整個 Cluster 的工具, 還在開發中。
Reference:
http://gearman.org/
http://blog.flier.lu/2010/04/gearman-performance-tunning/