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