如何使用PHP建立大型網站之心得報告
作者:賴岱佑
標題:如何使用PHP建立大型網站之心得報告
這篇文章實屬心得報告,也就是調查報告。本人只有中型網站的經驗,並沒有大型網站建置經驗。所謂中型定義為同時上線人數1000人以上,而大型網站定義為10000人以上。而使用的技術為PHP,這也是超大型網站所使用的語言,例如:YA!HOO。因為本人有幸參與大型網站建置計畫,因此特別去調查相關建置的資訊及方案。而所彙整而成的一篇報告,供大家參考。
首先要建構大型網站,必須先考量這個入口有何影響,並且採用幾層的架構。基本上採用三層式架構即可,這個想法與N層架構相差甚大,原因在於大型網站要進出的有效率,採用N層架構則會影響到效率的問題。而經過實驗三層式架構即可,而這三層架構並非我們一般所談的三層架構,而是大型網站的三層式架構,分別為『檢視層』、『商業層』、『資料層』,其實這與軟體工程所提的『MVC模式』有異曲同工之妙。所謂『檢視層』就是只做為一個大型網站的介面,就像入口網站一樣,有數台的分散式的入口主機,或是單台的入口主機。而入口主機還必須搭配術台的『媒體伺服器』,因入口主機只負責進出一些資料量較小的操作,而大量的圖片則分散的交由『媒體伺服器』來負責。這樣可以避免入口主機被大量的圖片而拖垮。在『商業層』的部分,負責處理接收自『檢視層』的訊息,並且經過商業邏輯加以處理後回應,或者自各『資料層』伺服器中存取資料。『商業層』還必須顧及到安全性的問題,因此在撰寫程式的時候有許多要注意的地方,這些會在文中其他節討論。而『資料層』運作可採取分散式的做法,或是單台資料庫的做法,這取決於硬體設備,當然少不了備援主機以及備份主機,而且固定時間採用異地備份的方式,才是比較安全的方法。
『檢視層』在設計時要注意幾點,本人大致整理如述。首先區分伺服器端與客戶端的程式碼,能夠在客戶端上運作的程式碼,儘量採用。把負載分給客戶端,減輕『檢視層』的負荷。其次,使用『樣板』設計,為的是要分離『靜態的內容』與『動態的程式碼』,其原因是PHP內『靜態內容』與『動態程式』是無法採取併行作業,因此效率不高,所以才要使用『樣板』來做設計。Smarty就是個很好的選擇。最後,『檢視層』內的媒體內容,要有分散的能力,否則會因為要傳輸大量媒體內容,而拖垮『檢視層』的入口主機。
『商業層』以PHP的觀點來看,有幾個重點工作。第一:權限,第二:CGI的設定,第三:PHP的安全設定,第四:變數登入的優先順序,第五:禁止某些函數的遠端存取,第六:隱藏系統資訊,第七:開啟錯誤記錄,第八:錯誤處理,第九:刪除不該存在的紀錄,第十:資料隱碼的檢查。以上順序由一到十,是參考書籍所討論的順序,個人認為是由預防到救援的階段,一開始透過一些已知的工作,可以預防部分的問題,慢慢的進入到錯誤處理之後,就是救援的階段了。這在設計程式上,必須一段一段的來做,不可能一次就寫出完美的商業層程式,也就是說,先把架構完成,然後開始檢查權限的問題,下一步就是檢查CGI的設定,以此類推,經過十道手續後,才算把商業層的程式碼完成。
『資料層』在這裡討論的部分有關於硬體跟軟體之間的配合,也就是系統架構。依照不同硬體的負荷能力,可分為單台與多台分散式的模型。但都要搭配備援主機及備份主機,而備份主機最好採取異地備份的方式,較為安全。而與商業層溝通的時候,驗證機制最為重要。資料層不與檢視層直接溝通,因為那會造成可能的危機,因此只與商業層溝通,由商業層負責控制(Control)資料層的存取,所以有很多的驗證機制可以選擇。還有在處理多國語言的時候,編碼問題是要特別去考量的,有些編碼不但會造成處理上的盲點,還會造成效率上的問題。更細一點,資料庫的系統要與資料庫的內容分開放置,系統規系統運作,而內容規內容紀錄,不要擺放在一起,這避免磁碟效率影響。
綜觀而論,要實作的話每一層都必須要有多位專業人員負責,一個人實在無法在短期內可以將每一層都做到完美,因此依照不同的專業,應該要將各層所需的項目逐一列清單出來,一一畫分工作區塊,才有可能達成。進而由各層的測試,進入到整合測試階段。整合測試階段結束後,如何維護運作等等的相關問題,還會不斷的接踵而來。想要建置大型網站,真是一件必須深思熟慮的事情。
參考(Reference):
1. 廣川 類、桑村 潤,PHP5徹底研究,博碩文化,2006年9月
2. Cristian Darie、Mihai Bucica,PHP5 and MySQL購物網站開發技術,博碩文化,2005/09/14
3. 陳湘揚、陳國益,PHP5+MYSQL網頁系統開發設計,博碩文化,2006/06/22