CentOS的Gearman安装与使用无错版
?通常,多語言多系統(tǒng)之間的集成是個大問題,一般來說,人們多半會采用WebService的方式來處理此類集成問題,但不管采用何種風(fēng)格的WebService,如RPC風(fēng)格,或者REST風(fēng)格,其本身都有一定的復(fù)雜性。相比之下,Gearman也能實(shí)現(xiàn)類似的作用,而且更簡單易用。
 
 一個Gearman請求的處理過程涉及三個角色:Client -> Job -> Worker。
 
 Client:請求的發(fā)起者,可以是C,PHP,Perl,MySQL UDF等等。
 Job:請求的調(diào)度者,用來負(fù)責(zé)協(xié)調(diào)把Client發(fā)出的請求轉(zhuǎn)發(fā)給合適的Work。
 Worker:請求的處理者,可以是C,PHP,Perl等等。
 
 因?yàn)镃lient,Worker并不限制用一樣的語言,所以有利于多語言多系統(tǒng)之間的集成。
 
 甚至我們通過增加更多的Worker,可以很方便的實(shí)現(xiàn)應(yīng)用程序的分布式負(fù)載均衡架構(gòu)。
 
 下面看看如何安裝運(yùn)行一個例子,條件所限,我們把Client,Job,Worker三個角色運(yùn)行在一臺服務(wù)器上:
 
 安裝libevent:
wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
 tar zxvf libevent-1.4.12-stable.tar.gz
 cd libevent-1.4.12-stable/
 ./configure --prefix=/usr
 make && make install
 /sbin/ldconfig
 cd ../
?
安裝Gearman server and library:
wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz
 tar zxvf gearmand-0.9.tar.gz
 cd gearmand-0.9
 ./configure
 make
 make install
 /sbin/ldconfig
 cd ../
 
 
安裝Gearman PHP extension:
 
 wget http://pecl.php.net/get/gearman-0.5.0.tgz
 tar zxvf gearman-0.5.0.tgz
 cd gearman-0.5.0
 /usr/local/webserver/php/bin/phpize
 ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-gearman
 make
 make install
 cd ../
 
 編輯php.ini配置文件加載相應(yīng)模塊并使之生效:
 
 extension = "gearman.so"
 
 啟動Job:
 
 gearmand -d
 
 如果當(dāng)前用戶是root的話,則需要這樣操作:
 
 gearmand -d -u root
 
 缺省會使用4730端口,下面會用到。
 
 注意:如果找不到gearmand命令的路徑,別忘了用whereis gearmand確認(rèn)。
?
我們可以用 ps 指令來查看啟動是否成功:
ps aux |grep gearman編寫Worker:
 
 worker.php文件內(nèi)容如下:
 
 <?php
 $worker= new GearmanWorker();
 $worker->addServer('127.0.0.1', 4730);
 $worker->addFunction('reverse', 'my_reverse_function');
 
 while ($worker->work());
 
 function my_reverse_function($job)
 {
 ??? return strrev($job->workload());
 }
 ?> 
 
 設(shè)置后臺運(yùn)行work:
 
 #php /var/www/html/worker.php &
編寫Client:
 
 client.php文件內(nèi)容如下:
 
 <?php
 $client= new GearmanClient();
 $client->addServer('127.0.0.1', 4730);
 echo $client->do('reverse', 'Hello World!'), "\n";
 ?>
 
 運(yùn)行client:
 
 #php /var/www/html/client.php
 
 輸出:!dlroW olleH
?
首先, PHP Gearman Extension 提供了一個名為GearmanClient 的類別,它可以讓程序安排工作給 Job Server 。
而 addServer 方法表示要通知的是哪些 Job Server ,也就是說如果有多臺 Job Server 的話,就可以透過 addServer 新增。
然后我們將要呼叫哪個 Worker 以及該 Worker 所需要的數(shù)據(jù),利用 GearmanClient 的doBackground 方法傳送過去。 doBackground 方法顧名思義就是在背景執(zhí)行, Client 在丟出需求后就可以繼續(xù)處理其他的程序。
=============
$client->doBackground('sendEmail', serialize($emailData));
 echo "Email sending is done.\n";
============
doBackground 方法的第一個參數(shù)是告訴 Job Server 要執(zhí)行哪個功能,而這個功能則是由 Worker 提供的;要注意是,這個參數(shù)只是識別用的,并不是真正的函式名稱。而第二個參數(shù)是要傳給 Worker 的數(shù)據(jù),它必須是個字符串;因此如果要傳送的是數(shù)組的話,我們就要用 PHP 的 serialize 函式來對這些資料做串行化。
?
 
 出于方便的考慮,Worker,Client使用的都是PHP,但這并不影響演示,實(shí)際應(yīng)用中,你完全可以通過Gearman集成不同語言實(shí)現(xiàn)的Worker,Client?;蛟S此時你還想了解前面提到的負(fù)載均衡功能:很簡單,只要增加多個Worker即可,你可以按照worker.php的樣子多寫幾個類似的文件,并設(shè)置不同的返回值用以識別演示效果。然后依次啟動這幾個Worker文件,并多次使用client.php去請求,你就會發(fā)現(xiàn)Job會把Client請求轉(zhuǎn)發(fā)給不同的Worker。
 
以守護(hù)進(jìn)程啟動
 gearmand -L?192.168.0.1 -p 4730 -u root -d
?
命令行工具
 
 如果你覺得安裝PHP之類的東西太麻煩的話,你也可以僅僅通過命令行工具來體驗(yàn)Gearman的功能:
 
 啟動Worker:gearman -w -f wc -- wc -l &
 運(yùn)行Client:gearman -f wc < /etc/passwd
 
 具體可以參考官方文檔,還有一些不錯的PDF。
http://docs.php.net/manual/zh/book.gearman.php
 
 http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/index.html
 
 也可以參考此文:http://www.jaceju.net/blog/archives/1211
?
分布式基礎(chǔ)學(xué)習(xí)【一】 —— 分布式文件系統(tǒng)
http://www.cnblogs.com/duguguiyu/archive/2009/02/22/1396034.html
分布式基礎(chǔ)學(xué)習(xí)【二】 —— 分布式計(jì)算系統(tǒng)(Map/Reduce)
http://www.cnblogs.com/duguguiyu/archive/2009/02/28/1400278.html
淘寶網(wǎng)Hadoop專家
http://coderplay.javaeye.com/
 
 ?
總結(jié)
以上是生活随笔為你收集整理的CentOS的Gearman安装与使用无错版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 神迹
- 下一篇: 黄山风景区护士免费吗
