LAMP架構(gòu)——我的工作心得
圖-LAMP
09年末入創(chuàng)業(yè)型小公司,技術(shù)崗位摸爬滾打一年多,10年末有幸加盟大型互聯(lián)網(wǎng)公司,在解決了終身大事之后,閑來之時有意總結(jié)工作中所思所想,于是有了這一系列文章,技術(shù)不精,文筆粗糙,貽笑大方了。本文是系列文章中的第一篇,主題在于LAMP架構(gòu)中的L組件。
為避免歧義,本系列文章中的LAMP是指Linux+Apache+MySQL+PHP。LAMP、JAVA/J2EE、.NET是當前web架構(gòu)的三足鼎立。LAMP架構(gòu)相比于JAVA/J2EE,其有輕量,快速部署等明顯優(yōu)點;跟.NET相比,其具有跨平臺,高性能低價格等優(yōu)點。如果你的企業(yè)時間有限,成本控制意識強烈,LAMP架構(gòu)是你最好的選擇。本系列文章主要關(guān)注LAMP組件本身的配置優(yōu)化問題,對于應用程序的優(yōu)化則不在我的討論范圍之內(nèi)。
我的第一份工作是在一家小型的創(chuàng)業(yè)型的公司做服務器端程序開發(fā)。公司主要業(yè)務是SNS網(wǎng)頁游戲的開發(fā),現(xiàn)在線上游戲也有好幾個,由于各方面原因,游戲都不怎么成功,不過回憶總結(jié)那段時間,還是學到了不少東西。當時公司的開發(fā)服務器、運營服務器上的LAMP環(huán)境是我搭建起來的,由于經(jīng)驗有限,當時只要系統(tǒng)跑起來就OK了,并沒有考慮過多的性能優(yōu)化。后來隨著在線人數(shù)的激增,才慢慢去做一些優(yōu)化的工作。
關(guān)于L,有個版本的問題,當前Unix-like版本實在太多了。選擇什么版本作為我們服務器的系統(tǒng)?我當時選擇了CentOS。出于免費的原因,我們不去考慮紅帽的各種企業(yè)版。CentOS 是 RHEL(Red Hat Enterprise Linux)源代碼再編譯的產(chǎn)物,而且在 RHEL 的基礎(chǔ)上修正了不少已知的 Bug ,相對于其他 Linux 發(fā)行版,其穩(wěn)定性值得信賴。而且工作之前我有兩年多的Fedora使用經(jīng)驗,F(xiàn)edora和CentOS的關(guān)系,讓我更加堅定的選擇了CentOS。
由于是回憶總結(jié)性質(zhì)的文章,我不打算把LAMP的各版本號全部都列出來,對于我這篇文章,并不妨礙討論。幾乎所有的linux版本都會包含LAMP,從這個意義上說安裝配置LAMP環(huán)境是輕而易舉的。安裝的簡便性使人誤以為這些LAMP組建會自動順利的運行,這往往事與愿違。最終,應用程序的負載會超過后端服務器的自帶的設(shè)置的處理能力。因此,自己完全掌控LAMP組建的配置尤為重要,健全的監(jiān)控機制也很重要,因為它們是你優(yōu)化系統(tǒng)的唯一依據(jù)。
一般而言,我們的服務器都是遠程托管的,因此,服務器具備遠程管理能力異常重要?,F(xiàn)在一般是通過SSHD。在大多數(shù)的Linux操作系統(tǒng)中,都自帶有一款open-ssh遠程管理與控制的服務軟件:SSHD,SSH是一個遠程登陸工具。采用SSL協(xié)議加密,在安全性方面比傳統(tǒng)的Telnet要高。同時SSHD帶有SCP、SFTP功能,可以很方便地實現(xiàn)本地到遠程管理控制、遠程到遠程的文件傳輸。 默認情況下,安裝完CentOS以后,配置好網(wǎng)絡(luò)后就可以通過SSHD遠程連接主機了。進行遠程管理的時候,借用類似于putty、SecureCRT等工具可以在windows平臺下完成,十分方便。
創(chuàng)建一個高性能的web站點,你需要遵守的眾多基本原則之一是:使用標準的安裝路徑和配置。應用程序從開發(fā)到部署,原則上需要經(jīng)過三種類型的服務器:開發(fā)服務器,測試服務器以及運營服務器。如果我們不使用標準的安裝路徑和配置,那么在這三種類型的服務器之間進行遷移的時候極有可能出現(xiàn)錯誤,需要各種費時費力的調(diào)整才可以運行,維護起來也比較麻煩。
另一方面,遵守這一原則,會極大的方便你的權(quán)限分配,備份,監(jiān)控等操作。從操作系統(tǒng)層面來說,CentOS在安裝時候,要分配出var分區(qū),用于存放web服務器的日志文件。如果你恰當?shù)呐渲媚愕南到y(tǒng),那么var會分離成一個相對獨立的文件系統(tǒng),這樣帶來的好處之一就是:如果應用程序突然寫入大量的日志并占用完你的磁盤空間,應用程序不至于崩潰。如果日志文件和主代碼混在一起,則后果比較嚴重,應用程序就會崩潰。別忘了,日志的輪替機制有可能失效。這一點很重要。
開始考慮LAMP架構(gòu)的時候,誰都不會忽略安全方面的考慮。這里簡單提一下SELinux。關(guān)于SELinux,經(jīng)常會由于配置方面的原因給你帶來不少麻煩,網(wǎng)上隨便一搜,到處是如何關(guān)閉這一安全利器的文章,是有點遺憾。其實,只要你認真看完這里(點我),你就足以利用SELinux來保護你的webserver了,你要知道,關(guān)閉了SELinux,并不是一種優(yōu)雅的解決問題的方法。
如果需要足夠的安全,專門的硬件防火墻必不可少,除此之外,你還應配置iptables。網(wǎng)上有說,最佳實踐的iptables配置有五頁左右,而我看看默認的CentOS配置說明僅有10行左右,明顯不足。另外,請別使用root賬戶來運行Apache,雖然root用戶安裝軟件包很方便,完全沒有權(quán)限困擾,但是如果你的Apache是由root用戶運行的,那就相當于別有用心的進入你的Apache就意味這他接管了你的系統(tǒng)。
我對操作系統(tǒng)也就是LAMP中的L對整個LAMP架構(gòu)的影響體會不是很深,希望各位看官莫笑,還請多多賜教。
通過文章我, 想必大家通過我的體會和指導,都了解了LAMP對LAMP架構(gòu)很好用!
【編輯推薦】
- LAMP攻略之PHP執(zhí)行sql語句的寫法
- LAMP攻略之MySQL數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù)導出及導入
- LAMP攻略之MySQL索引
- LAMP快速構(gòu)建apache web服務器
- LAMP攻略之Apache與PHP的整合過程
- LAMP環(huán)境下Apache + SSL Howto譯文
- LAMP下Apache-mysql-php安裝