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