深入分析 LAMP 架構(gòu)
圖-LAMP
LAMP 架構(gòu)具體內(nèi)容如下:
LAMP就是Linux Apache MySql Php的縮寫(xiě),是目前非常強(qiáng)大的架站組合。
如今,使用 LAMP(Linux®、Apache、MySQL 和 PHP/Perl)架構(gòu)的應(yīng)用程序不斷被開(kāi)發(fā)和部署。但是,服務(wù)器管理員對(duì)應(yīng)用程序本身幾乎沒(méi)有控制能力,因?yàn)閼?yīng)用程序是別人編寫(xiě)的。這份共三部分的系列文章將討論許多服務(wù)器配置問(wèn)題,這些配置會(huì)影響應(yīng)用程序的性能。第一篇文章討論 LAMP 架構(gòu)、一些性能度量技術(shù)以及一些基本的 Linux 內(nèi)核、硬盤(pán)和文件系統(tǒng)調(diào)節(jié)。后續(xù)的文章將研究 Apache、MySQL 和 PHP 組件的調(diào)優(yōu)。
Linux、 Apache、MySQL 和 PHP(或 Perl)是許多 Web 應(yīng)用程序的基礎(chǔ) —— 從 to-do 列表到 blog,再到電子商務(wù)站點(diǎn)。WordPress 和 Pligg 是兩個(gè)支持大容量 Web 站點(diǎn)的常用軟件包。這種架構(gòu)簡(jiǎn)稱為 LAMP。幾乎每個(gè) Linux 發(fā)布版都包含 Apache、MySQL、PHP 和 Perl,所以安裝 LAMP 軟件是非常容易的。
安裝的簡(jiǎn)便性使人誤以為這些軟件會(huì)自行順利地運(yùn)行,但是實(shí)際情況并非如此。最終,應(yīng)用程序的負(fù)載會(huì)超出后端服務(wù)器自帶設(shè)置的處理能力,應(yīng)用程序的性能會(huì)降低。LAMP 安裝需要不斷監(jiān)控、調(diào)優(yōu)和評(píng)估。
系統(tǒng)調(diào)優(yōu)對(duì)于不同的人有不同的含義。本系列主要關(guān)注 LAMP 組件(Linux、Apache、MySQL 和 PHP)的調(diào)優(yōu)。對(duì)應(yīng)用程序本身進(jìn)行調(diào)優(yōu)是另一個(gè)復(fù)雜的問(wèn)題。應(yīng)用程序和后端服務(wù)器之間存在一種共生關(guān)系:未能適當(dāng)調(diào)優(yōu)的服務(wù)器甚至?xí)棺詈玫膽?yīng)用程序在負(fù)載之下崩潰,而借助充分的調(diào)優(yōu),完全可以避免編寫(xiě)得很糟糕的應(yīng)用程序使服務(wù)器緩慢如牛。幸運(yùn)的是,正確的系統(tǒng)調(diào)優(yōu)和監(jiān)視可以指出應(yīng)用程序中的問(wèn)題。
#p#
LAMP 架構(gòu)
對(duì)任何系統(tǒng)進(jìn)行調(diào)優(yōu)的第一步都是了解它的工作原理。按照最簡(jiǎn)單的形式,基于 LAMP 的應(yīng)用程序是用 PHP 這樣的腳本語(yǔ)言編寫(xiě)的,它們作為 Linux 主機(jī)上運(yùn)行的 Apache Web 服務(wù)器的一部分運(yùn)行。
PHP 應(yīng)用程序通過(guò)請(qǐng)求的 URL、所有表單數(shù)據(jù)和已捕獲的任意會(huì)話信息從客戶機(jī)獲得信息,從而確定應(yīng)該執(zhí)行什么操作。如有必要,服務(wù)器會(huì)從 MySQL 數(shù)據(jù)庫(kù)(也在 Linux 上運(yùn)行)獲得信息,將這些信息與一些 Hypertext Markup Language(HTML)模板組合在一起,并將結(jié)果返回給客戶機(jī)。當(dāng)用戶在應(yīng)用程序中導(dǎo)航時(shí),這個(gè)過(guò)程重復(fù)進(jìn)行;當(dāng)多個(gè)用戶訪問(wèn)系統(tǒng)時(shí),這個(gè)過(guò)程會(huì)并發(fā)進(jìn)行。但是,數(shù)據(jù)流不是單向的,因?yàn)榭梢杂脕?lái)自用戶的信息更新數(shù)據(jù)庫(kù),包括會(huì)話數(shù)據(jù)、統(tǒng)計(jì)數(shù)據(jù)(包括投票)和用戶提交的內(nèi)容(比如評(píng)論或站點(diǎn)更新)。除了動(dòng)態(tài)元素之外,還有靜態(tài)元素,比如圖像、JavaScript 代碼和層疊樣式表(CSS)。
#p#
LAMP 的變體
LAMP 最初是指 Linux、Apache、MySQL 和 PHP(或 Perl)。但是,如果管理員不擅長(zhǎng) Linux,那么可以在 Microsoft® Windows® 上運(yùn)行 Apache、MySQL 和 PHP,這并非一種少見(jiàn)的情況。同樣,也可以將 Apache 換成別的系統(tǒng),比如 lighttpd,產(chǎn)生的仍然是 LAMP 風(fēng)格的系統(tǒng),但是首字母縮寫(xiě)不再是 LAMP 了。也可以改用另一種開(kāi)放源碼數(shù)據(jù)庫(kù)(比如 PostgreSQL 或 SQLite)、商業(yè)數(shù)據(jù)庫(kù)(比如 IBM® DB2®)或者免費(fèi)的商業(yè)引擎(比如 IBM DB2 Express-C)。
本文主要關(guān)注傳統(tǒng)的 LAMP 架構(gòu),因?yàn)檫@種架構(gòu)是最常見(jiàn)的,而且它的組件都是開(kāi)放源碼的。
在研究 LAMP 系統(tǒng)中的請(qǐng)求流之后,就來(lái)看看可能出現(xiàn)性能瓶頸的地方。數(shù)據(jù)庫(kù)提供許多動(dòng)態(tài)信息,所以數(shù)據(jù)庫(kù)對(duì)查詢的響應(yīng)延遲都會(huì)反映在客戶機(jī)中。Web 服務(wù)器必須能夠快速地執(zhí)行腳本,還要能夠處理多個(gè)并發(fā)請(qǐng)求。最后,底層操作系統(tǒng)必須處于良好的狀態(tài)才能支持應(yīng)用程序。通過(guò)網(wǎng)絡(luò)在不同服務(wù)器之間共享文件的其他設(shè)置也可能成為瓶頸。
通過(guò)文章的主觀分析,我們就LAMP得出結(jié)論:LAMP架構(gòu)有Apache、MySQL 和 PHP等。
【編輯推薦】