官方文檔:http://gearman.org/getting-started/ 安裝方法和示例都有,可以詳細看一下。
Gearman是一個分發任務的程序框架,可以用在各種場合,與Hadoop相比,Gearman更偏向於任務分發功能。它的任務分布非常簡單,簡單得可以只需要用腳本即可完成。Gearman最初用於LiveJournal的圖片resize功能,由於圖片resize需要消耗大量計算資源,因此需要調度到后端多台服務器執行,完成任務之后返回前端再呈現到界面。
Gearman可以做什么
- 異步處理:圖片處理,訂單處理,批量郵件/通知之類的
- 要求高CPU或內存的處理:大容量的數據處理,MapReduce運算,日志聚集,視頻編碼
- 分布式和並行的處理
- 定時處理:增量更新,數據復制
- 限制速率的FIFO處理
- 分布式的系統監控任務
1,安裝方法
#安裝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的話裝一下
yum install php-pear
如果pecl沒法安裝的話,可以直接下載源代碼,使用phpize編譯安裝
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來異步處理百度雲推送服務)
先看client.php注冊事件,client.php
<?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處理;
還可以啟動多個worker,Gearman會自動進行負載均衡,分配到不同的worker進行處理。
大家可以發掘更多應用場景...
例如:通過Gearman實現MySQL到Redis的數據同步(異步復制)
gearman的監控:
可以使用supervisor,也可以使用gearman manager
使用supervisor監控gearman任務的例子見:
http://www.cnblogs.com/trying/p/4038285.html
