Gearman是一個分發任務的程序框架,能夠用在各類場合,Gearman更偏向於任務分發功能。它的任務分佈很是簡單,簡單得能夠只須要用腳本便可完成。php
Gearman 分佈式任務實現原理上只用到2個字段,function name 和 data。function name即任務名稱,由client傳給job server,centos
job server根據function name選擇合適的worker節點來執行。data一般爲執行任務所需的自定義的內容,好比簡單的作法能夠把須要執行的腳本當成data便可(固然要注 意其中的安全防範)。安全
若是有多個worker能夠處理同一個function name, 則job server會自動分配一個。當用於遠程監控場景時,咱們可讓每一個worker註冊成不一樣的業務名稱,以達到方便控制每臺worker節點的目的。框架
#安裝運行依賴 yum install -y boost boost-devel libevent libevent-devel gperf libuuid libuuid-devel #下載最新版 Gearman wget --no-check-certificate https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz ./configure make && make install mkdir -p /usr/local/var/log # 建立日誌目錄,不然沒法啓動服務# 安裝PHP擴展支持 wget http://pecl.php.net/get/gearman-1.1.2.tgz #下載PHP擴展 tar zxf gearman-1.1.2.tgz cd gearman-1.1.2 phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install #修改php.ini配置文件,新增如下內容 extension=gearman.so service php-fpm restart # 重啓服務 在centos下,通常文檔介紹使用 gearmand -d 啓動。有時可能有問題,這時可使用命令 gearmand --log-file gearmand.log --listen 192.168.97.12 --port=4730 -d # -------------------- client.php 文件內容 ---------------------- # <?php $client= new GearmanClient(); $client->addServer('127.0.0.1', 4730); for ($i=0; $i<15; $i++) { $data = array( 'time' => date('Y-m-d H:i:s'), 'idx' => $i ); $dataString = serialize($data); $client->doBackground('jobName', $dataString); } # -------------------- worker.php 文件內容 ---------------------- # <?php $worker = new GearmanWorker(); $worker->addServer('127.0.0.1', 4730); $worker->addFunction('jobName', 'my_task'); while ($worker->work()){ if ($worker->returnCode() != GEARMAN_SUCCESS) { echo 'Something Wrong :'.$worker->returnCode(); //Gearman 狀態錯誤 須要作日誌或異常處理 } } function my_task($job) { $dataString = $job->workload(); $data = unserialize($dataString); echo var_export($data, true).PHP_EOL; sleep(3); }