利用Gearman,搭建异步分布式计算平台
生活随笔
收集整理的這篇文章主要介紹了
利用Gearman,搭建异步分布式计算平台
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Gearman的介紹
主頁在http://gearman.org/index.php, 它的主要優點有:
1. 實現了異步計算。可以將比較耗時的計算分配到分布式計算集群來減少站點服務器的壓力和用戶的等待。例如passport里的郵件發送/頭像上傳裁減/國內外數據分離請求等等。
2. 跨語言,有利于多語言多系統之間的集成。PHP/Perl/Java/C++可以融合在一起,用Perl實現的郵件發送功能PHP也能自由調用,也可以使用Perl調用另一臺服務器上用C++編寫的程序的一個函數。
3. 便于擴展和實現負載均衡。可以通過增加worker的數量來提供更好的性能,在其中一臺出現問題的時候能夠由其他的worker來完成任務。
4. 開源
5. 快速: 利用了c最小化的減少了系統開銷。
?
Gearman的安裝配置1.安裝Gearman server and library:
wget http://launchpad.net/gearmand/tr ... gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install
2.安裝Gearman PHP extension:
wget http://pecl.php.net/get/gearman-0.4.0.tgz
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
make
make install
3.編輯php.ini配置文件加載相應模塊并使之生效:
extension = "gearman.so"
4.啟動Job:
gearmand -d
如果當前用戶是root的話,則需要這樣操作:
gearmand -d -u root
缺省會使用4730端口,下面會用到。
以調試的方式啟動:
gearmand -vv
5.編寫Worker:
worker.php文件內容如下:
<?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());
}
?>??
設置后臺運行work:
php worker.php &
6.編寫Client:
client.php文件內容如下:
<?php
$client= new GearmanClient();
$client->addServer('127.0.0.1', 4730);
echo $client->do('reverse', 'Hello World!'), "/n";
?>
運行client:
php client.php
輸出:!dlroW olleH
? 可能遇到的問題 Couldn't find uuid/uuid.h 解決辦法:在新立得里搜索并安裝uuid-dev。
? gearmand: error while loading shared libraries: libgearman.so.1: cannot open shared object file: No such file or directory libgearman.so一般是在 /usr/local/lib下,看看/etc/ld.so.conf是否包含這個目錄,執行/sbin/ldconfig -v刷新一下。
? Fatal error: Class 'GearmanWorker' not found? 是否在cli的php.ini下加入“extension="gearman.so"”這一行配置。 Gearman與Perl
安裝Gearman模塊,使用Gearman::Worker和Gearman::Client模塊即可。
具體編碼方式可參考cpan。
需要注意的是$client->do_task()方法返回的是一個reference。
下面是例子。 worker.pl use Gearman::Worker; my $worker = Gearman::Worker->new; $worker->job_servers('127.0.0.1:4730'); $worker->register_function("reverse", /&test); $worker->work while 1; sub test { return join(' ', $_[0]->handle, $_[0]->arg, 'world', "/n"); } client.pl use Gearman::Client; my $client = Gearman::Client->new; $client->job_servers('127.0.0.1:4730'); # running a single task my $result = $client->do_task("reverse", "hello"); # return a scalar reference print $$result; Gearman異步模式的實現
在Perl的Gearman::Client模塊里已經實現了異步的方法,采用dispatch_background時client請求不會等待worker的響應就立即返回了。
總結
以上是生活随笔為你收集整理的利用Gearman,搭建异步分布式计算平台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邮件实用技巧一:如何让你的邮件畅通全球
- 下一篇: 数据库进阶系列之三:使用Logminer