官方文檔:http://gearman.org/getting-started/ 安裝方法和示例都有,能夠詳細看一下。php
Gearman是一個分發任務的程序框架,能夠用在各類場合,與Hadoop相比,Gearman更偏向於任務分發功能。它的任務分佈很是簡單,簡單得能夠只須要用腳本便可完成。Gearman最初用於LiveJournal的圖片resize功能,因爲圖片resize須要消耗大量計算資源,所以須要調度到後端多臺服務器執行,完成任務以後返回前端再呈現到界面。html
Gearman能夠作什麼前端
1,安裝方法mysql
#安裝gearman yum install gearmand #安裝libgearman yum install libgearman-devel #安裝gearman php擴展 pecl install gearman #添加gearman.so到 php.ini echo "extension=gearman.so" >> /etc/php.ini
沒有pecl的話裝一下redis
yum install php-pear
若是pecl無法安裝的話,能夠直接下載源代碼,使用phpize編譯安裝sql
cd ~/software wget http://pecl.php.net/get/gearman-1.1.2.tgz cd gearman-1.1.2 phpize ./configure make && make install
2,簡單使用示例:(咱們使用Gearman來異步處理百度雲推送服務)apache
先看client.php註冊事件,client.phpjson
<?php // 建立Gearman對象 $client = new GearmanClient(); // addServer默認是localhost,端口默認是4730,若是不是默認的話能夠調整 $client -> addServer(); // $client->addServer("192.168.0.0",4730); echo "Sending job\n"; $username = "test"; $message = "message"; $data = array( "username" => $username, "message" => $message , ); // 註冊事件 以及 傳遞參數 , 多個參數使用json_encode轉換 // 任務能夠阻塞式運行,還能夠指定優先級 ;固然,也能夠非阻塞(運行不等待結果)運行 // 能夠參考php Gearman api文檔 : doNornal, doHigh, doLow,doBackground $result = $client -> doBackground("testFunction", json_encode($data)); if ($result) { echo "Success: $result\n"; } ?>
再看worker的處理,其實就是註冊事件處理函數 , worker.php後端
<?php $worker = new GearmanWorker(); $worker->addServer(); // 註冊事件及事件處理函數 $worker->addFunction("testFunction","handler"); // 運行worker while ($worker->work()); function handler(GearmanJob $job) { $workload = json_decode($job->workload()); echo "received: " . print_r($workload,1); } ?>
能夠命令行運行 php client.php , php worker.php ,這裏啓動順序最好是先啓動worker,這樣事件能夠獲得及時處理;也能夠先啓動client,事件會在Gearman中排隊,等待worker處理;api
還能夠啓動多個worker,Gearman會自動進行負載均衡,分配到不一樣的worker進行處理。
你們能夠發掘更多應用場景...
例如:經過Gearman實現MySQL到Redis的數據同步(異步複製)
gearman的監控:
可使用supervisor,也可使用gearman manager
使用supervisor監控gearman任務的例子見: