嘗試用Gearman實現分布式處理(PHP)

2021-05-21 19:29:38 字數 2213 閱讀 3245

本文需要你已對gearman有個大致了解,如果不知該東東是何物,請參考之前一篇**日誌《gearman - 分布式遠端過程處理框架》

http://hi.baidu.com/thinkinginlamp/blog/item/ff49972b9e7378f3e6cd40aa.html (學學gearman)

http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/index.html (用 gearman 分發 php 應用程式的工作負載)

更多參考大家還是自己google吧:)

本文只記錄我實踐的過程和其中可能遇到的問題。

試驗環境(虛擬機器):ubuntu9.04 + php5.2.6

開始了。。。

先安裝任務分發的job端

安裝gearman server and library:

中間可能會遇到些問題:

在./configure的時候,可能會出現缺少libraries的情況,一般是缺少libevent和uuid這兩個開發包,安裝之。。。

sudo apt-get install libevent-dev

sudo apt-get install uuid-dev

安裝完成後再重新配置安裝,安裝完成後執行

sudo ldconfig

因為本試驗client和worker端都由php來實現,所以需要安裝php的gearman擴充套件

安裝gearman php extension:

中間可能遇到的問題:

找不到phpize命令,phpize在php開發包中,所以要先安裝php5-dev

sudo apt-get install php5-dev

安裝完後,就可以在原始碼目錄中執行phpize生成相關安裝配置資訊,接著執行後面的./configure等

make install後,它告訴你乙個目錄,生成的gearman.so就在那裡。

根據需要考到相應php的擴充套件目錄裡(因為我直接用系統預設安裝的php,它自動生成就在擴充套件中)

接下來修改php.ini以使php載入該模組:

php --ini

看下php.ini在**,sudo vim 修改之,在其中加入

extension = "gearman.so"

然後,開始編寫client和worker端

client.php

worker.php

準備工作已經完畢,試驗開始

1、啟動job

gearmand -d

2、啟動worker

php -c /etc/php5/apache2/php.ini worker.php

3、啟動client(新開終端中開啟)

php -c /etc/php5/apache2/php.ini client.php

螢幕顯示字串的長度 「5」

這裡,有幾點需要說明一下:

1、這裡直接用php cli方式執行,新增-c引數是為了載入php.ini配置檔案,以載入gearman擴充套件

2、worker應該做成守護程序(cli模式),可以開啟多個,這樣client發起的任務就會分發到各個worker分別來執行(自動負載均衡 )

這個例子由於太過簡單,即使開啟多個worker也無法看出效果,不過可以通過終止其中乙個,可以看出系統自動切換到其他worker繼續正常執行

3、同理,client也是可以開啟多個的(模型請參考之前的那邊日誌)

4、同時,job也可以開啟多個,以避免單點故障

分布式的任務分發框架 Gearman

官方文件 安裝方法和示例都有,可以詳細看一下。gearman是乙個分發任務的程式框架,可以用在各種場合,與hadoop相比,gearman更偏向於任務分發功能。它的任務分布非常簡單,簡單得可以只需要用指令碼即可完成。gearman最初用於livejournal的resize功能,由於resize需要...

Gearman安裝與使用,分布式訊息佇列

1 介紹 gearman是乙個用來把工作委派給其他機器 分布式的呼叫更適合做某項工作的機器 併發的做某項工作在多個呼叫間做負載均衡 或用來在呼叫其它語言的函式的系統。2 組成 3執行過程 4 gearmand安裝 5 gearmand使用 5.1建立worker worker new gearman...

Zookeeper分布式鎖的嘗試使用

通過嘗試使用資料庫和redis來實現分布式鎖的方式 還有另外一種就是基於資料庫本身提供的排他鎖來實現分布式的鎖,利用資料庫的innodb引擎可以借助它自身的事務功能給我們開啟的鎖,當乙個執行緒進來時,通過select from table where for update可以讓innodb引擎在查詢...