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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

分布式任务分发框架Gearman教程和PHP实现实例

發布時間:2024/4/13 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式任务分发框架Gearman教程和PHP实现实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、Gearman介紹和使用場景

Gearman是一個分發任務的程序框架,可以用在各種場合,與Hadoop相 比,Gearman更偏向于任務分發功能。它的任務分布非常簡單,簡單得可以只需要用腳本即可完成。Gearman最初用于LiveJournal的圖片 resize功能,由于圖片resize需要消耗大量計算資源,因此需要調度到后端多臺服務器執行,完成任務之后返回前端再呈現到界面。


通常,多語言多系統之間的集成是個大問題,一般來說,人們多半會采用WebService的方式來處理此類集成問題,但不管采用何種風格的WebService,如RPC風格,或者REST風格,其本身都有一定的復雜性。相比之下,Gearman也能實現類似的作用,而且更簡單易用。


一個Gearman請求的處理過程涉及三個角色:Client -> Job -> Worker。


Client:請求的發起者,可以是C,PHP,Perl,MySQL UDF等等。
Job:請求的調度者,用來負責協調把Client發出的請求轉發給合適的Work。
Worker:請求的處理者,可以是C,PHP,Perl等等。


因為Client,Worker并不限制用一樣的語言,所以有利于多語言多系統之間的集成。


甚至我們通過增加更多的Worker,可以很方便的實現應用程序的分布式負載均衡架構。

2、Gearman job分發服務端安裝

安裝Gearman server and library:
wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
sudo make
sudo make install


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

sudo apt-get install libevent-dev
sudo apt-get install uuid-dev


安裝完成后再重新配置安裝,安裝完成后執行
sudo ldconfig

3、Gearman?Client和Worker端PHP實現實例

安裝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
sudo make
sudo make install


中間可能遇到的問題:
找不到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


[php]?view plaincopy

  • <?php????

  • ??$client=?new?GearmanClient();????

  • ??$client->addServer("127.0.0.1",?4730);????

  • ??print?$client->do("title",?"Linvo");????

  • ??print?"/n";????

  • ?>????


  • worker.php


    [php]?view plaincopy

  • <?php????

  • ??$worker=?new?GearmanWorker();????

  • ??$worker->addServer("127.0.0.1",?4730);?????

  • ??$worker->addFunction("title",?"title_function");????

  • ??while?(true){

  • ? ? ?$worker->work();

  • ? ? ?if ($this->worker->returnCode() != GEARMAN_SUCCESS) {
    //Gearman 狀態錯誤 需要做日志或異常處理
    ? ? ?}

  • ? }

  • ???????

  • ??function?title_function($job)????

  • ??{????

  • ????$str?=?$job->workload();????

  • ????return?strlen($str);????

  • ??}????

  • ?>??


  • 準備工作已經完畢,試驗開始
    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也可以開啟多個,以避免單點故障


    轉載于:https://blog.51cto.com/mengphilip/1619650

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的分布式任务分发框架Gearman教程和PHP实现实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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