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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

用 Gearman 分发 PHP 应用程序的工作负载

發(fā)布時間:2024/2/28 php 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 Gearman 分发 PHP 应用程序的工作负载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

盡管一個 Web 應(yīng)用程序的大部分內(nèi)容都與表示有關(guān),但它的價值與競爭優(yōu)勢卻可能體現(xiàn)在若干專有服務(wù)或算法方面。如果這類處理過于復(fù)雜或拖沓,最好是進(jìn)行異步執(zhí)行,以免 Web 服務(wù)器對傳入的請求沒有響應(yīng)。實(shí)際上,將一個計(jì)算密集型的或?qū)iT化的功能放在一個或多個獨(dú)立的專用服務(wù)器上運(yùn)行,效果會更好。

常用的縮略詞

  • API:應(yīng)用程序編程接口
  • HTTP:超文本傳輸協(xié)議
  • LAMP:Linux、Apache、MySQL 與 PHP

PHP 的 Gearman 庫能把工作分發(fā)給一組機(jī)器。Gearman 會對作業(yè)進(jìn)行排隊(duì)并少量分派作業(yè),而將那些復(fù)雜的任務(wù)分發(fā)給為此任務(wù)預(yù)留的機(jī)器。這個庫對 Perl、Ruby、C、Python 及 PHP 開發(fā)人員均可用,并且還可以運(yùn)行于任何類似 UNIX? 的平臺上,包括 Mac OS X、 Linux? 和 Sun Solaris。

向一個 PHP 應(yīng)用程序添加 Gearman 非常簡單。假設(shè)您將 PHP 應(yīng)用程序托管在一個典型的 LAMP 配置上,那么 Gearman 將需要一個額外的守護(hù)程序以及一個 PHP 擴(kuò)展。截止到 2009 年 11 月,Gearman 守護(hù)程序的最新版本是 0.10,并且有兩個 PHP 擴(kuò)展可以用 — 一個用 PHP 包裹了 Gearman?C?庫,另一個用純 PHP 編寫。我們要用的是前者。它的最新版本是 0.6.0,可以從 PECL 或 Github(參見?參考資料)獲取它的源代碼。

請注意:對于本文而言,producer?指的是生成工作請求的機(jī)器;consumer?是執(zhí)行工作的機(jī)器;而?agent?則是連接 producer 與適當(dāng) consumer 的中介。

安裝 Gearman

向一個機(jī)器添加 Gearman 需要兩步:第一步構(gòu)建并啟動這個守護(hù)程序,第二步構(gòu)建與 PHP 版本相匹配的 PHP 擴(kuò)展。這個守護(hù)程序包包括構(gòu)建此擴(kuò)展所需的所有庫。

首先,下載 Gearman 守護(hù)程序?gearmand?的最新源代碼,解壓縮這個 tarball,構(gòu)建并安裝此代碼(安裝需要有超級用戶的權(quán)限,即根用戶權(quán)限)。

1

2

3

4

5

6

7

$ wget http://launchpad.net/gearmand/trunk/\

??0.10/+download/gearmand-0.10.tar.gz

$ tar xvzf gearmand-0.10.tar.gz

$ cd gearmand-0.10

$ ./configure

$ make

$ sudo make install

安裝?gearmand?后,構(gòu)建 PHP 擴(kuò)展。您可以從 PECL 獲取這個 tarball,也可以從 Github 復(fù)制該存儲庫。

1

2

3

4

5

6

7

$ wget http://pecl.php.net/get/gearman-0.6.0.tgz

$ cd pecl-gearman

#

# or

#

$ git clone git://github.com/php/pecl-gearman.git

$ cd pecl-gearman

有了這些代碼后,就可以開始構(gòu)建擴(kuò)展了:

1

2

3

4

$ phpize

$ ./configure

$ make

$ sudo make install

這個 Gearman 守護(hù)程序通常被安裝在 /usr/sbin。可以從命令行直接啟動此守護(hù)程序,也可以將這個守護(hù)程序添加到啟動配置中,以便在機(jī)器每次重啟時就可以啟動這個守護(hù)程序。

接下來,需要安裝 Gearman 擴(kuò)展。打開 php.ini 文件(可以通過?php --ini?命令快速找到這個文件),然后添加代碼行?extension = gearman.so:

1

2

3

4

5

$ php --ini

Loaded Configuration File:???????? /etc/php/php.ini

$ vi /etc/php/php.ini

...

extension = gearman.so

保存此文件。要想驗(yàn)證擴(kuò)展是否啟用,請運(yùn)行?php --info,然后查找 Gearman:

1

2

3

4

$ php --info | grep "gearman support"

gearman

gearman support => enabled

libgearman version => 0.10

此外,還可以用一個 PHP 代碼片段來驗(yàn)證構(gòu)建和安裝是否得當(dāng)。將這個小應(yīng)用程序保存到 verify_gearman.php:

1

2

3

<?php

??print gearman_version() . "\n";

?>

接下來,從命令行運(yùn)行此程序:

1

2

$ php verify_gearman.php

0.10

如果這個版本號與之前構(gòu)建和安裝的 Gearman 庫的版本號相匹配,那么系統(tǒng)就已準(zhǔn)備好了。

運(yùn)行 Gearman

我們前面提到過,一個 Gearman 配置有三個角色:

  • 一個或多個 producer 生成工作請求。每個工作請求命名它所想要的函數(shù),例如?email_all?或?analyze。
  • 一個或多個 consumer 完成請求。每個 consumer 命名它所提供的一個或多個函數(shù)并向 agent 注冊這些功能。一個 consumer 也可以被稱為是一個?worker。
  • 代理對與之建立連接的那些 consumer 提供的所有服務(wù)進(jìn)行集中編制。它將 producer 與恰當(dāng)?shù)?consumer 聯(lián)系起來。

借助如下的命令行,可以立即體驗(yàn) Gearman:

  • 啟動這個 agent,即 Gearman 守護(hù)程序:

    1

    $ sudo /usr/sbin/gearmand --daemon

  • 用命令行實(shí)用工具?gearman?運(yùn)行一個 worker。這個 worker 需要一個名字并能運(yùn)行任何命令行實(shí)用工具。例如,可以創(chuàng)建一個 worker 來列出某個目錄的內(nèi)容。-f?參數(shù)命名了該 worker 所提供的函數(shù):

    1

    $ gearman -w -f ls -- ls -lh

  • 最后的一個代碼塊是一個 producer,或用來生成查找請求的一個作業(yè)。也可以用?gearman?生成一個請求。同樣,用?-f?選項(xiàng)來指定想要從中獲得幫助的那個服務(wù):

    1

    2

    3

    4

    5

    6

    7

    $ gearman -f ls < /dev/null

    drwxr-xr-x@ 43 supergiantrobot? staff?? 1.4K Nov 15 15:07 gearman-0.6.0

    -rw-r--r--@? 1 supergiantrobot? staff??? 29K Oct? 1 04:44 gearman-0.6.0.tgz

    -rw-r--r--@? 1 supergiantrobot? staff?? 5.8K Nov 15 15:32 gearman.html

    drwxr-xr-x@ 32 supergiantrobot? staff?? 1.1K Nov 15 14:04 gearmand-0.10

    -rw-r--r--@? 1 supergiantrobot? staff?? 5.3K Jan? 1? 1970 package.xml

    drwxr-xr-x? 47 supergiantrobot? staff?? 1.6K Nov 15 14:45 pecl-gearman

  • 從 PHP 使用 Gearman

    從 PHP 使用 Gearman 類似于之前的示例,惟一的區(qū)別在于這里是在 PHP 內(nèi)創(chuàng)建 producer 和 consumer。每個 consumer 的工作均封裝在一個或多個 PHP 函數(shù)內(nèi)。

    清單 1?給出了用 PHP 編寫的一個 Gearman worker。將這些代碼保存在一個名為?worker.php?的文件中。

    清單 1. Worker.php

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    <?php

    ??$worker= new GearmanWorker();

    ??$worker->addServer();

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

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

    ????

    ??function title_function($job)

    ??{

    ????return ucwords(strtolower($job->workload()));

    ??}

    ?>

    清單 2?給出了用 PHP 編寫的一個 producer,或?client。將此代碼保存在一個名為?client.php?的文件內(nèi)。

    清單 2. Client.php

    1

    2

    3

    4

    5

    6

    <?php

    ??$client= new GearmanClient();

    ??$client->addServer();

    ??print $client->do("title", "AlL THE World's a sTagE");

    ??print "\n";

    ?>

    現(xiàn)在,可以用如下的命令行連接客戶機(jī)與 worker 了:

    1

    2

    3

    4

    5

    $ php worker.php &

    $ php client.php

    All The World's A Stage

    $ jobs

    [3]+? Running???????????????? php worker.php &

    這個 worker 應(yīng)用程序繼續(xù)運(yùn)行,準(zhǔn)備好服務(wù)另一個客戶機(jī)。

    Gearman 的高級特性

    在一個 Web 應(yīng)用程序內(nèi)可能有許多地方都會用到 Gearman。可以導(dǎo)入大量數(shù)據(jù)、發(fā)送許多電子郵件、編碼視頻文件、挖據(jù)數(shù)據(jù)并構(gòu)建一個中央日志設(shè)施 — 所有這些均不會影響站點(diǎn)的體驗(yàn)和響應(yīng)性。可以并行地處理數(shù)據(jù)。而且,由于 Gearman 協(xié)議是獨(dú)立于語言和平臺的,所以您可以在解決方案中混合編程語言。比如,可以用 PHP 編寫一個 producer,用?C、Ruby 或其他任何支持 Gearman 庫的語言編寫 worker。

    一個連接客戶機(jī)和 worker 的 Gearman 網(wǎng)絡(luò)實(shí)際上可以使用任何您能想象得到的結(jié)構(gòu)。很多配置能夠運(yùn)行多個代理并將 worker 分配到許多機(jī)器上。負(fù)載均衡是隱式的:每個可操作的可用 worker(可能是每個 worker 主機(jī)具有多個 worker)從隊(duì)列中拉出作業(yè)。一個作業(yè)能夠同步或異步運(yùn)行并具有優(yōu)先級。

    Gearman 的最新版本已經(jīng)將系統(tǒng)特性擴(kuò)展到了包含持久的作業(yè)隊(duì)列和用一個新協(xié)議來通過 HTTP 提交工作請求。對于前者,Gearman 工作隊(duì)列保存在內(nèi)存并在一個關(guān)系型數(shù)據(jù)庫內(nèi)存有備份。這樣一來,如果 Gearman 守護(hù)程序故障,它就可以在重啟后重新創(chuàng)建這個工作隊(duì)列。另一個最新的改良通過一個 memcached 集群增加隊(duì)列持久性。memcached 存儲也依賴于內(nèi)存,但被分散于幾個機(jī)器以避免單點(diǎn)故障。

    Gearman 是一個剛剛起步卻很有實(shí)力的工作分發(fā)系統(tǒng)。據(jù) Gearman 的作者 Eric Day 介紹,Yahoo! 在 60 或更多的服務(wù)器上使用 Gearman 每天處理 600 萬個作業(yè)。新聞聚合器 Digg 也已構(gòu)建了一個相同規(guī)模的 Gearman 網(wǎng)絡(luò),每天可處理 400,000 個作業(yè)。Gearman 的一個出色例子可以在 Narada 這個開源搜索引擎(參見?參考資料)中找到。

    Gearman 的未來版本將收集并報告統(tǒng)計(jì)數(shù)據(jù)、提供高級監(jiān)視和緩存作業(yè)結(jié)果等。為了跟蹤這個 Gearman 項(xiàng)目,可以訂閱它的 Google 組,或訪問 Freenode 上它的 IRC 頻道?#gearman。

    相關(guān)主題

    • 利用?Gearman?站點(diǎn),了解有關(guān)此庫的更多信息。
    • Narada 搜索引擎?是一個開源項(xiàng)目,強(qiáng)調(diào)了最新開源技術(shù)(包括 Gearman)的使用。
    • 查閱?Gearman 下載?和擴(kuò)展,包括針對?C?庫的 PHP 擴(kuò)展。
    • PHP.net?是面向 PHP 開發(fā)人員的中心資源。
    • 查閱 “推薦 PHP 讀物列表”。
    • 查看 IBM developerWorks 的?PHP 項(xiàng)目資源,擴(kuò)展您的 PHP 技巧。
    • 要將數(shù)據(jù)庫與 PHP 結(jié)合使用?查看?Zend Core for IBM,它是一個無縫的、可以立即使用、易于安裝、支持 IBM DB2 V9 的 PHP 開發(fā)和生產(chǎn)環(huán)境。
    • 隨時關(guān)注 developerWorks?技術(shù)活動和網(wǎng)絡(luò)廣播。
    • 訪問 developerWorks?Open source 專區(qū)?獲得豐富的 how-to 信息、工具和項(xiàng)目更新以及?最受歡迎的文章和教程,幫助您用開放源碼技術(shù)進(jìn)行開發(fā),并將它們與 IBM 產(chǎn)品結(jié)合使用。
    • 下載?IBM 產(chǎn)品評估試用版軟件?或?IBM SOA Sandbox for Reuse,并開始使用來自 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere? 的應(yīng)用程序開發(fā)工具和中間件產(chǎn)品。
    超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的用 Gearman 分发 PHP 应用程序的工作负载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。