胡冀川 黃代榮
【摘 要】LAMP環(huán)境主要是指在Linux操作系統(tǒng)上使用Apache、Mysql、PHP軟件搭建的動態(tài)網(wǎng)站和開源服務(wù)器環(huán)境。研究在Linux發(fā)行版本CentOS上實(shí)現(xiàn)網(wǎng)站環(huán)境的優(yōu)化。CentOS環(huán)境下面搭建的網(wǎng)站環(huán)境相對windows環(huán)境具有很大優(yōu)勢,但采用新的技術(shù)手段對提高環(huán)境的訪問速度、處理能力、安全性是很有必要的,對降低硬件成本有相當(dāng)大幫助。
【關(guān)鍵詞】職業(yè)規(guī)劃;LAMP;CentOS;Apache;MySQL;PHP
1 LAMP網(wǎng)站環(huán)境使用情況分析
LAMP作為一種開源的環(huán)境,由于具有簡易性、安全性、低成本、靈活擴(kuò)展性等特點(diǎn)或優(yōu)勢,LAMP架構(gòu)應(yīng)用的普及范圍擴(kuò)大,已從簡單、小型系統(tǒng)的應(yīng)用擴(kuò)充到復(fù)雜、大型系統(tǒng)的應(yīng)用,形成了一種發(fā)展潮流。
1.1 LAMP大環(huán)境
根據(jù)PHPChina資料統(tǒng)計(jì)顯示在Alexa排名中國前200名的網(wǎng)站中有61%的采用LAMP環(huán)境,這其中包括騰訊、百度、雅虎、新浪、搜狐、Tom等一大批國內(nèi)知名網(wǎng)站平臺。
隨著開源潮流的蓬勃發(fā)展,開放源代碼的LAMP已經(jīng)與J2EE和.Net商業(yè)軟件形成三足鼎立之勢,并且該軟件開發(fā)的項(xiàng)目在軟件方面的投資成本較低,因此受到整個IT界的關(guān)注。從網(wǎng)站的流量上來說,70%以上的訪問流量是LAMP來提供的,LAMP是最強(qiáng)大的網(wǎng)站解決方案。
1.2 CentOS
在distrowatch.com網(wǎng)站上面關(guān)于最近12個月全球Linux的279種發(fā)行版本的統(tǒng)計(jì)信息可以看到,在Linux大家族中占據(jù)第7的位置。并且從近一個月的統(tǒng)計(jì)信息看出其上升趨勢很明顯。
在服務(wù)器端的優(yōu)勢更加的明顯,在云服務(wù)器時代,CentOS通常被視為一套穩(wěn)定可靠的服務(wù)器發(fā)行版操作系統(tǒng)來使用,穩(wěn)定性突出、可靠性拔群,并針對最新軟件及功能提供長期支持,使其在Linux家族中占得一席之地。
1.3 Apache
根據(jù)NetCraft公司的統(tǒng)計(jì)數(shù)據(jù)顯示,Apache服務(wù)器軟件穩(wěn)穩(wěn)的占據(jù)第一的位置,市場占有度操作一半。
1.4 Mysql
MySQL數(shù)據(jù)庫作為一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),很受到公司和個人的喜愛,在DB-Engines網(wǎng)站上查詢到的相關(guān)信息可以看出長期占據(jù)第二的位置,增長趨勢也是很明顯的。
2 LAMP優(yōu)化
職業(yè)規(guī)劃應(yīng)用平臺的LAMP環(huán)境中,我們從將優(yōu)化工作分為PHP程序優(yōu)化、MySQL數(shù)據(jù)庫優(yōu)化、Apache優(yōu)化、同時加入了Memcache和Redis緩存技術(shù),很大程度上提高了服務(wù)器處理效率,節(jié)約了硬件成本。
2.1 PHP程序優(yōu)化
由于PHP是一門腳本式的語言,相對于其它一些編程語言PHP有它不擅長做的事,比如處理deamon程序。我們針對PHP的優(yōu)化工作主要是兩方面,一方面是對php.ini配置文件的優(yōu)化,另一方面是代碼的優(yōu)化。
php.ini優(yōu)化當(dāng)中考慮到php內(nèi)置的一些函數(shù)如果運(yùn)用到工程會極大影響工程的質(zhì)量,在配置文件中禁止掉這些函數(shù)的使用是一種聰明的行為,我們在配置環(huán)境中就禁止了如exec,system,passthru等一系列的函數(shù)的使用,降低了函數(shù)使用的風(fēng)險性,同時也避免了當(dāng)程序出現(xiàn)漏洞時,產(chǎn)生系統(tǒng)級的影響。在php的默認(rèn)配置中為了方便開發(fā)者打開了錯誤輸出,在上線的環(huán)境中我們將display_errors配置設(shè)置為off,這樣既減少了開銷,同時也能夠屏蔽了當(dāng)發(fā)生錯誤的時候顯示一些相關(guān)的特殊的錯誤信息,影響系統(tǒng)的安全性。魔術(shù)引導(dǎo)php的使用是相當(dāng)不劃算的,在magic_quotes_gpc我們關(guān)閉了魔術(shù)引導(dǎo)的。在網(wǎng)站的目錄訪問上我們做了相當(dāng)嚴(yán)格的限制,限制非法的請求。
代碼優(yōu)化用很小的改變就可以帶來很有價值的結(jié)果。
1)代碼中盡量少的減少對文件的一系列操作,避免開銷,在代碼中必須使用文件操作中,把file、fopen、feof等文件操作函數(shù)用file_get_contents代替;
2)在對數(shù)據(jù)庫的操作當(dāng)中盡量少的使用INSERT、UPDATE操作;
3)盡可能的使用內(nèi)置函數(shù),在使用內(nèi)置函數(shù)的時候避免使用正則;
4)在對多維數(shù)組處理中減少循環(huán)嵌套的賦值,使用foreach代替while、for。
2.2 MySQL數(shù)據(jù)庫優(yōu)化
MySQL數(shù)據(jù)庫是比較優(yōu)秀的數(shù)據(jù)管理系統(tǒng),在使用當(dāng)中一些簡單的優(yōu)化工作會很大程度提高數(shù)據(jù)的使用效率。
1)設(shè)計(jì)優(yōu)化:存儲引擎將MySQL中數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中。Cobar是阿里巴巴研發(fā)的關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng),該產(chǎn)品成功替代了原先基于Oracle的數(shù)據(jù)存儲方案,目前已經(jīng)接管了3000+個MySQL數(shù)據(jù)庫的schema,平均每天處理近50億次的SQL執(zhí)行請求;數(shù)據(jù)的編碼方式上統(tǒng)一使用utf8,避免產(chǎn)生亂碼問題,在表字段設(shè)計(jì)中考慮需求,避免了存儲空間的浪費(fèi);
2)軟件優(yōu)化:采用mysql復(fù)制,實(shí)現(xiàn)讀寫分離、負(fù)載分?jǐn)偟炔僮魈岣邤?shù)據(jù)交換的效率;對數(shù)據(jù)表進(jìn)行垂直拆分和水平拆分,優(yōu)化查詢;
3)配置優(yōu)化:索引緩沖參數(shù)設(shè)置,對將會使用到JOIN,WHERE判斷和ORDER BY的字段創(chuàng)建索引,也避免對含有重復(fù)值過多的字段創(chuàng)建索引;在配置中設(shè)置線程連接超時參數(shù)和線程冰法利用數(shù)量。
2.3 緩存技術(shù)
影響網(wǎng)站性能的很大原因是Apache同MySQL之間進(jìn)行頻繁的數(shù)據(jù)交換數(shù)據(jù)查詢,這在很大程度上影響到了性能。但是動態(tài)網(wǎng)站的內(nèi)容必然來至于數(shù)據(jù)庫,如果有方法將動態(tài)網(wǎng)頁內(nèi)容靜態(tài)化,將動態(tài)網(wǎng)站中的部分內(nèi)容靜態(tài)化,減少每個用戶的數(shù)據(jù)庫訪問量。memcache是一套分布式的高速緩存系統(tǒng),MemCache的工作流程如下:先檢查客戶端的請求數(shù)據(jù)是否在memcache中,如有,直接把請求數(shù)據(jù)返回,不再對數(shù)據(jù)庫進(jìn)行任何操作;如果請求的數(shù)據(jù)不在memcache中,就去查數(shù)據(jù)庫,把從數(shù)據(jù)庫中獲取的數(shù)據(jù)返回給客戶端,同時把數(shù)據(jù)緩存一份到memcache中(memcache客戶端不負(fù)責(zé),需要程序明確實(shí)現(xiàn));每次更新數(shù)據(jù)庫的同時更新memcache中的數(shù)據(jù),保證一致性;當(dāng)分配給memcache內(nèi)存空間用完之后,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數(shù)據(jù)首先被替換,然后再替換掉最近未使用的數(shù)據(jù)。當(dāng)一個用戶訪問數(shù)據(jù)庫后,將會把更新緩存中的數(shù)據(jù),當(dāng)下一個用戶請求訪問的時候,會先檢查緩存中是否存在該數(shù)據(jù),如果存在直接使用數(shù)據(jù),既提高了訪問的速度,也減輕了MySQL的壓力。
【參考文獻(xiàn)】
[1]楊明華,等.LAMP網(wǎng)站開發(fā)黃金組合LINUX+APACHE+MYSQL+PHP[M].電子工業(yè)出版社,2008.
[2]曾棕根.LAMP(PHP)程序設(shè)計(jì)[M].北京大學(xué)出版社,2012.
[3][美]Tim Boronczyk.PHP & MySQL范例精解[M].清華大學(xué)出版,2009.
[責(zé)任編輯:鄧麗麗]