分佈式的任務分發框架-Gearman

官方文檔:http://gearman.org/getting-started/ 安裝方法和示例都有,能夠詳細看一下。php

Gearman是一個分發任務的程序框架,能夠用在各類場合,與Hadoop相比,Gearman更偏向於任務分發功能。它的任務分佈很是簡單,簡單得能夠只須要用腳本便可完成。Gearman最初用於LiveJournal的圖片resize功能,因爲圖片resize須要消耗大量計算資源,所以須要調度到後端多臺服務器執行,完成任務以後返回前端再呈現到界面。html

Gearman能夠作什麼前端

  • 異步處理:圖片處理,訂單處理,批量郵件/通知之類的
  • 要求高CPU或內存的處理:大容量的數據處理,MapReduce運算,日誌彙集,視頻編碼
  • 分佈式和並行的處理
  • 定時處理:增量更新,數據複製
  • 限制速率的FIFO處理
  • 分佈式的系統監控任務

 

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任務的例子見:

http://www.cnblogs.com/trying/p/4038285.html

相關文章
相關標籤/搜索