Gearman介紹
Gearman提供了一種通用的程序框架來將你的任務分發到不同的機器或者不同的進程當中。它提供了你進行並行工作的能力、負載均衡處理的能力,以及在不同程序語言之間溝通的能力。Gearman能夠應用的領域非常廣泛,從高可用的網站到數據庫的複製任務。總之,Gearman就是負責分發處理的中樞系統,它的優點包括:
開源:Gearman免費並且開源而且有一個非常活躍的開源社區,如果你想來做一些貢獻,請點擊 。
多語言支持:Gearman支持的語言種類非常豐富。讓我們能夠用一種語言來編寫Worker程序,但是用另外一種語言編寫Client程序。
靈活:不必拘泥於固定的形式。您可以採用你希望的任何形式,例如 Map/Reduce。
快速:Gearman的協議非常簡單,並且有一個用C語言實現的,經過優化的服務器,保證應用的負載在非常低的水平。
可植入:因爲Gearman非常小巧、靈活。因此您可以將他置入到現有的任何系統中。
沒有單點:Gearman不僅可以幫助擴展系統,同樣可以避免系統的失敗。
Gearman的工作原理
使用Gearman的應用通常有三部分組成:一個Client、一個Worker、一個 任務服務器。 Client的作用是提出一個 Job 任務 交給 Job Server 任務服務器。Job Server 會去尋找一個 合適的 Worker 來完成這項任務。Worker 執行由 Client 發送過來的 Job,並且將結果通過 Job Server 返回給 Client。Gearman 提供了 Client 和 Worker 的 API,利用這些API 應用可以同 Gearman Job Server來進行通信。Gearman 內部 Client 和 Worker 之間的通信都是通過 TCP 連接來進行的。工作的流程如下圖所示:
示例
worker.py
import os
import gearman
import math
class CustomGearmanWorker(gearman.GearmanWorker):
def on_job_execute(self, current_job):
print "Job started"
return super(CustomGearmanWorker, self).on_job_execute(current_job)
def task_callback(gearman_worker, job):
print job.data
return job.data
if __name__ == '__main__':
new_worker = CustomGearmanWorker(['localhost:4730'])
new_worker.register_task("echo", task_callback)
new_worker.work()
client.py
from gearman import GearmanClient
new_client = GearmanClient(['localhost:4730'])
current_request = new_client.submit_job('echo', 'foo')
new_result = current_request.result
print new_result
運行gearman server:
gearmand --daemon --listen=127.0.0.1