官網:http://gearman.org/
gearman-0.7.0.tgz php擴充
gearman-mysql-udf-0.5.tar.gz
gearmand-0.14.tar.gz c版的server[還有java,perl版的]
yugene-Gearman-Monitor-ed34347.zip 監控
https://github.com/yugene/Gearman-Monitor 監控
http://baike.baidu.com/view/2926980.htm
http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html
跨多種環境部署 Gearman
http://www.ibm.com/developerworks/cn/opensource/os-gearman/index.html
利用開源的Gearman架構構建分布式圖片處理平台-張宴
http://blog.s135.com/dips/
Gearman是一個用來把工作委派給其他機器、分布式的調用更適合做某項工作的機器、並發的做某項工作在多個調用間做負載平衡、或用來在調用其它語言的函數的系統。
Gearman提供了一種通用的程式架構來將你的任務分發到不同的機器或者不同的進程當中。它提供了你進行並行工作的能力、負載平衡處理的能力,以及在不同程式語言之間溝通的能力。Gearman能夠應用的領域非常廣泛,從高可用的網站到資料庫的複製任務。總之,Gearman就是負責分發處理的中樞系統,它的優點包括:
開源:Gearman免費並且開源而且有一個非常活躍的開源社區,如果你想來做一些貢獻,請點擊 。
多語言支援:Gearman支援的語言種類非常豐富。讓我們能夠用一種語言來編寫Worker程式,但是用另外一種語言編寫Client程式。
靈活:不必拘泥於固定的形式。您可以採用你希望的任何形式,例如 Map/Reduce。
快速:Gearman的協議非常簡單,並且有一個用C語言實現的,經過最佳化的伺服器,保證應用的負載在非常低的水平。
可植入:因為Gearman非常小巧、靈活。因此您可以將他置入到現有的任何系統中。
沒有單點:Gearman不僅可以協助擴充系統,同樣可以避免系統的失敗。
目錄
Gearman 簡介
Gearman運行過程
Gearman新版本介紹
安裝 Gearman
展開
Gearman 簡介
通常,多語言多系統之間的整合是個大問題,一般來說,人們多半會採用 WebService 的方式來處理此類整合問題,但不管採用何種風格的 WebService,如 RPC 風格,或者 REST 風格,其本身都有一定的複雜性。相比之下,Gearman 也能實作類別似的作用,而且更簡單易用。
Gearman運行過程
一個Gearman請求的處理過程涉及三個角色:Client -> Job -> Worker。
Client:請求的發起者,可以是 C,PHP,Perl,MySQL UDF 等等。
Job:請求的調度者,用來負責協調把 Client 發出的請求轉寄給合適的 Work。
Worker:請求的處理者,可以是 C,PHP,Perl 等等。
因為 Client,Worker 並不限制用一樣的語言,所以有利於多語言多系統之間的整合。
甚至我們通過增加更多的 Worker,可以很方便的實現應用程式的分布式負載平衡架構。
Gearman新版本介紹
Gearman 1 月 16 日發布了 c 語言的 0.2 版本,gearman 提供了一個 work 傳遞其他機器,或者調用其他機器功能的架構,通過 gearman 你可以實現並行的工作,負載平衡處理,調用其他語言的函數。它可以應用在多種場合,從高可用性的 web 服務到資料庫複寫,換句話說,它是分散式處理的中樞神經。gearman 早期是 sixpart 實現的 perl 語言開發的版本,名字來源於“Manager”,這一架構只負責分發要做的工作,本身並不做任何實際的工作。(這點與 spread toolkit 相同 譯者注)。
安裝 Gearman
安裝 Gearman server and library
tar zxf gearmand-0.8.tar.gz[1]
cd gearmand-0.8
./configure
make
make install
安裝 Gearman PHP extension
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
make
make install
編輯 php.ini 設定檔載入相應模組並使之生效:
extension = "gearman.so"
/www/wdlinux/php/bin/phpize
./configure --with-php-config=/www/wdlinux/php/bin/php-config
make && make install
/www/wdlinux/php/bin/php --info | grep gearman
2. In another terminal, change to this source directory and run:
/www/wdlinux/php/bin/php examples/reverse_worker.php
3. In another terminal, change to this source directory and run:
/www/wdlinux/php/bin/php examples/reverse_client.php
啟動Job:
gearmand -d
如果目前使用者是 root 的話,則需要這樣操作:
gearmand -d -u root
預設會使用 4730 連接埠,下面會用到。
注意:如果找不到 gearmand 命令的路徑,別忘了用 whereis gearmand 確認。gearmand: /usr/local/sbin/gearmand
以守護進程啟動:
gearmand -L 192.168.0.1 -p 4730 -u root -d
編寫 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 &
編寫 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
出於方便的考慮,Worker,Client 使用的都是PHP,但這並不影響示範,實際應用中,你完全可以通過 Gearman 整合不同語言實現的 Worker,Client。或許此時你還想瞭解前面提到的負載平衡功能:很簡單,只要增加多個 Worker 即可,你可以按照 worker.php 的樣子多寫幾個類似的檔案,並設定不同的傳回值用以識別示範效果。然後依次啟動這幾個 Worker 檔案,並多次使用 client.php 去請求,你就會發現 Job 會把 Client 請求轉寄給不同的 Worker。
命令列工具
如果你覺得安裝 PHP 之類的東西太麻煩的話,你也可以僅僅通過命令列工具來體驗 Gearman 的功能:
啟動 Worker:gearman -w -f wc -- wc -l &
運行 Client:gearman -f wc < /etc/passwd
--一些意外,我沒遇到。
1 program_options需要編譯或者引用libs/program_options目錄的原始碼
2 編繹時要用g++ -o simple simple.cpp -lboost_program_options -L/usr/local/lib
http://www.cnblogs.com/cocowool/archive/2011/08/18/2144142.html
Linux上安裝Boost C++ Libraries
Gearman要依賴於 Boost C++ Libraries 中的 program_options 庫,並且需要的版本大於 1.39。筆者的CentOS 5.2 系統中內建的 1.33 不能滿足需求,在自己安裝的過程中會遇到一些問題,建議參考 Boost 官方手冊中的 Easy Build and Install 這部分。
安裝Gearman之後,第一次啟用可能會遇到 error while loading shared libraries: libgearman.so.1 這個問題。可以用下面的方法解決:
當運行 /usr/local/sbin/gearmand -d 時出現 error while loading shared libraries: libgearman.so.1
運行一下 /sbin/ldconfig -v ,然後再去運行gearman就可以了
ldconfig命令的用途,主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫設定檔/etc/ld.so.conf內所列的目錄 下,搜尋出可共用的動態連結程式庫(格式如前介紹,lib*.so*),進而建立出動態裝入程式(ld.so)所需的串連和快取檔案.快取檔案預設為/etc /ld.so.cache,此檔案儲存已排好序的動態連結程式庫名字列表.
ldconfig通常在系統啟動時運行,而當使用者安裝了一個新的動態連結程式庫時,就需要手工運行這個命令.
需要小心的一件事情是資料的共用。Gearman 不進行所交換資料的任何轉換或操作。對於這裡使用的簡單字串和整數沒有問題,但是不能共用 PHP 中的數組值並期望能在 Java 語言中被理解。對於這種類型的互動,可以使用很多結構化資料標準中的一種,比如 JavaScript Object Notation (JSON) 或 XML。另外,如果您在處理來自資料庫的資訊,只要共用 ID 或者找到需要處理的資料時要用到的資訊即可,或者使用 memcached 這樣的透明方法(儘管可能仍然需要 JSON 或等價物)。
-------------
test -z "/usr/local/lib/pkgconfig" || /bin/mkdir -p "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 support/gearmand.pc '/usr/local/lib/pkgconfig'
Installing shared extensions: /www/wdlinux/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/
/www/wdlinux/php/bin/php examples/reverse_worker.php [可運行多個,實現負載]
/www/wdlinux/php/bin/php examples/reverse_client.php
1.傳值一個name,一個序列化參數。
Gearman 的進階特性
在一個 Web 應用程式內可能有許多地方都會用到 Gearman。可以匯入大量資料、發送許多電子郵件、編碼視頻檔案、挖據資料並構建一個中央日誌設施 — 所有這些均不會影響網站的體驗和響應性。可以並行地處理資料。而且,由於 Gearman 協議是獨立於語言和平台的,所以您可以在解決方案中混合程式設計語言。比如,可以用 PHP 編寫一個 producer,用 C、Ruby 或其他任何支援 Gearman 庫的語言編寫 worker。
一個串連客戶機和 worker 的 Gearman 網路實際上可以使用任何您能想象得到的結構。很多配置能夠運行多個代理並將 worker 分配到許多機器上。負載平衡是隱式的:每個可操作的可用 worker(可能是每個 worker 主機具有多個 worker)從隊列中拉出作業。一個作業能夠同步或非同步運行並具有優先順序。
Gearman 的最新版本已經將系統特性擴充到了包含持久的作業隊列和用一個新協議來通過 HTTP 提交工作請求。對於前者,Gearman 工作隊列儲存在記憶體並在一個關係型資料庫記憶體有備份。這樣一來,如果 Gearman 精靈故障,它就可以在重啟後重新建立這個工作隊列。另一個最新的改良通過一個 memcached 叢集增加隊列持久性。memcached 儲存也依賴於記憶體,但被分散於幾個機器以避免單點故障。
Gearman 是一個剛剛起步卻很有實力的工作分發系統。據 Gearman 的作者 Eric Day 介紹,Yahoo! 在 60 或更多的伺服器上使用 Gearman 每天處理 600 萬個作業。新聞彙總器 Digg 也已構建了一個相同規模的 Gearman 網路,每天可處理 400,000 個作業。Gearman 的一個出色例子可以在 Narada 這個開源搜尋引擎(參見 參考資料)中找到。