日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用Gearman,搭建异步分布式计算平台

發布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用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,搭建异步分布式计算平台的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。