程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 為PHP應用提速、提速、再提速!第3部分

為PHP應用提速、提速、再提速!第3部分

編輯:PHP綜合

為PHP應用提速、提速、再提速!第3 部分: 用Memcache 守護程序把數據緩存到內存中

本系列文章的前兩篇文章提供了為PHP 應用程序提速的技術。第1 部分介紹了XCache,它是把PHP 操作碼緩存到內存中的PHP 擴展。XCache 將避免代價高昂且(嚴格來說)不必要的花費來重新編譯相同的PHP 代碼去交付一個頁面。XCache 是免費的開源軟件,安裝費時不多卻可提供巨大回報。第2 部分介紹了XDebug,它是配置PHP 代碼的PHP 擴展。XDebug 是類似於軟件x 光照片的內容:它將深入應用程序,揭露內部工作原理,並且揭示代碼如何度過其周期。擁有了XDebug 度量之後 —— 而不是之前 —— 您可以優化代碼來調整算法、減少瓶頸並減輕過多的內存使用。

注:XCache 適於生產使用。在開發過程中使用 XDebug 最佳,因為其計算負載在活動計算機中是十分浪費的。

這一次,讓我們探究第三種尤為有效的性能增強因素。名為 memcached 的 Memcache 守護程序是一種高性能的分布式對象緩存。memcached 的安裝位置介於應用程序與數據存儲之間,它將把對象保存在 RAM 中。

Memcache PHP 擴展將為訪問緩存提供一個簡單的應用程序接口 (API)。要使用緩存,需要調用 API 來確定先前是否已緩存了對象。如果已經緩存,只需檢索該對象並繼續進行處理。否則,轉至數據庫、獲取必需的數據、將其映射到對象中並把它添加到緩存中。在那裡,memcached 將最小化或消除針對您先前處理過的信息的數據庫查詢。

如果 XCache 和 XDebug 是渦輪增壓器,那麼 memcached 就是噴氣發動機。請准備好點燃加力燃燒室。

更高的速度需求

通常,PHP 應用程序中最耗費時間的任務是數據檢索。實際上,用於從存儲庫(文件或數據庫服務器)中獲取信息的時間遠高於編譯並且甚至是執行 PHP 程序所需耗費的時間。連接至數據庫服務器所需的時間是一次延遲,等待查詢完成添加附加停頓,並且結果的傳輸甚至會導致更多延遲。此外,如果代碼使用對象,則有指向對象的導致負擔過重的映射平面行。

MySQL 可以使用其查詢緩存為查詢階段提速。您還可以復制數據庫(一個主數據庫,多個副本),從而在多個 CPU 之間分擔查詢處理的負擔。但是,一旦底層表改變,MySQL 查詢緩存的內容就會過時。而且,僅當一個查詢與先前查詢相同時,查詢緩存才會被命中。副本也有限制。例如,無法分布數據庫寫操作。

從根本上說,雖然查詢緩存和數據庫副本都是有目的的並且在整體工作負載管理策略中占有地位(查詢緩存將消耗一些內存,但是在其他方面卻很節省;副本將把災難停機的風險降至最低),但是連接和傳輸時間不變。

Memcache PHP 擴展將把對象緩存到 RAM 中。每次緩存命中將替換到數據庫服務器的一次往返,使應用程序運行得更快。您很可能會發現 memcached 也(間接地)提高了數據庫服務器的性能;由於 memcached 將用作替代持久性存儲,因此到達數據庫服務器的請求更少,使數據庫服務器可以更高效地響應已收到的查詢。

您可以在一台或多台服務器上運行 memcached,並且將在所有節點之間復制緩存的內容。如果服務器出現故障,客戶機 API 軟件將把緩存讀寫操作重新路由到正常運行的備用服務器上。

不同於 XCache,您必須修改代碼才能集成 memcached。不過,如果您已經小心地隔離了一些對象方法內的數據庫訪問代碼,則修改將很可能十分輕微且集中。

Danga Interactive 編寫的 Memcache 守護程序是由 Berkeley Software Distribution (BSD) License 的自由條款許可的免費開源軟件。守護程序應當可以輕松地構建在 UNIX® 和 Linux® 系統上,也可以構建在 Mac OS X 和 Microsoft® Windows® 上。很多 Linux 發行版都提供了 memcached 包;請查看包存儲庫。如果使用 Mac OS X 或 Windows 並且更喜歡便捷的預構建二進制,則可以通過簡單的 Google 搜索在 Web 上找到此類軟件。

(重新)構建 PHP

讓我們在 Debian Linux 上構建、安裝和部署 memcached。要加速執行過程並允許您獨立於現有 Web 服務器基礎設施來測試 memcached,請使用 XAMPP Apache 發行版作為構建的基礎。XAMPP 十分易於安裝並且包含 Apache V2、MySQL、PHP V4 和 V5、Perl、許多庫和許多 Web 應用程序(例如 phpMyAdmin)。如果從未從頭開始構建 Linux、Apache、MySQL 和 PHP (LAMP) 堆棧,或者如果需要避免與此類努力相關聯的爭辯,則以 XAMPP 開始是十分理想的。

注:如果您以前通過源代碼構建了 PHP 並保留了文件,則只需把 --enables-memcache 選項添加到配置開關列表中,並且跳過構建 memcached 和 PHP Memcache 擴展以前所示的步驟。

要構建和部署 memcached,您需要 XAMPP 發行版,包括 XAMPP 開發文件、XAMPP 附帶的 PHP 版本的源代碼以及 memcached 的源代碼和 Memcache 的 PHP 擴展。您可以從 XAMPP 下載 XAMPP 二進制和 XAMPP 開發文件(構建附加組件的必備文件)。您還可以使用 wget 快速獲取軟件:

$ wget 'http://www.apachefriends.org/download.php?xampp-linux-1.6.tar.gz'
$ wget 'http://www.apachefriends.org/download.php?xampp-linux-devel-1.6.tar.gz'

前一個 tarball(tarball 是壓縮的 .tar 文件並且通常以後綴 .tar.gz 為結尾)包含二進制;後一個 tarball 包含針對 XAMPP 系統構建代碼所需的題頭文件。

雖然可以把 XAMPP 錨定在文件系統中的任意位置,但是請把壓縮包安裝到 /opt 中。同時把開發文件安裝到 /opt 中。使用 /opt 將使剩下的構建過程變得更輕松。對 tar 使用 -C 選項把文件直接解壓縮到 /opt 中,如下所示:

清單 1. 把文件直接解壓縮到 /opt 中

$ sudo mkdir /opt
$ tar xzf xampp-linux-1.6.tar.gz -C /opt
$ tar xzf xampp-linux-devel-1.6.tar.gz -C /opt
$ ls -CF /opt/lampp
RELEASENOTES  error/    info/    logs/    phpsqliteadmin/
backup/    etc/    lampp*    man/    sbin/
bin/    htdocs/    lib/    manual/    share/
build/    icons/    libexec/  modules/  tmp/
cgi-bin/  include/  licenses/  phpmyadmin/  var/

接下來,下載並解壓縮 XAMPP 附帶的 PHP 版本的源代碼(XAMPP V1.6 綁定了 PHP V4.4.6);從 PHP.net 下載 PHP V4.4.6 的代碼。wget 將再次使您可以輕而易舉地完成任務:

$ wget http://us2.php.net/get/php-4.4.6.tar.bz2/from/www.php.net/mirror
$ tar xjf php-4.4.6.tar.bz2
$ cd php-4.4.6

接下來,修改 XAMPP 的 PHP 構建腳本重新構建 PHP 以啟用 Memcache。您可以在 /opt/lampp/share/lampp/configures.tar.gz 中找到原始構建腳本(和其他構建腳本)。使用以下代碼解壓縮 PHP V4 構建腳本:

$ tar xzfv /opt/lampp/share/lampp/configures.tar.gz \
 php/configure-php4-oswald

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved