Skip to main content

如何使用PHP建立大型網站之心得報告

作者:賴岱佑
標題:如何使用PHP建立大型網站之心得報告



這篇文章實屬心得報告,也就是調查報告。本人只有中型網站的經驗,並沒有大型網站建置經驗。所謂中型定義為同時上線人數1000人以上,而大型網站定義為10000人以上。而使用的技術為PHP,這也是超大型網站所使用的語言,例如:YA!HOO。因為本人有幸參與大型網站建置計畫,因此特別去調查相關建置的資訊及方案。而所彙整而成的一篇報告,供大家參考。

首先要建構大型網站,必須先考量這個入口有何影響,並且採用幾層的架構。基本上採用三層式架構即可,這個想法與N層架構相差甚大,原因在於大型網站要進出的有效率,採用N層架構則會影響到效率的問題。而經過實驗三層式架構即可,而這三層架構並非我們一般所談的三層架構,而是大型網站的三層式架構,分別為『檢視層』、『商業層』、『資料層』,其實這與軟體工程所提的『MVC模式』有異曲同工之妙。所謂『檢視層』就是只做為一個大型網站的介面,就像入口網站一樣,有數台的分散式的入口主機,或是單台的入口主機。而入口主機還必須搭配術台的『媒體伺服器』,因入口主機只負責進出一些資料量較小的操作,而大量的圖片則分散的交由『媒體伺服器』來負責。這樣可以避免入口主機被大量的圖片而拖垮。在『商業層』的部分,負責處理接收自『檢視層』的訊息,並且經過商業邏輯加以處理後回應,或者自各『資料層』伺服器中存取資料。『商業層』還必須顧及到安全性的問題,因此在撰寫程式的時候有許多要注意的地方,這些會在文中其他節討論。而『資料層』運作可採取分散式的做法,或是單台資料庫的做法,這取決於硬體設備,當然少不了備援主機以及備份主機,而且固定時間採用異地備份的方式,才是比較安全的方法。

『檢視層』在設計時要注意幾點,本人大致整理如述。首先區分伺服器端與客戶端的程式碼,能夠在客戶端上運作的程式碼,儘量採用。把負載分給客戶端,減輕『檢視層』的負荷。其次,使用『樣板』設計,為的是要分離『靜態的內容』與『動態的程式碼』,其原因是PHP內『靜態內容』與『動態程式』是無法採取併行作業,因此效率不高,所以才要使用『樣板』來做設計。Smarty就是個很好的選擇。最後,『檢視層』內的媒體內容,要有分散的能力,否則會因為要傳輸大量媒體內容,而拖垮『檢視層』的入口主機。

『商業層』以PHP的觀點來看,有幾個重點工作。第一:權限,第二:CGI的設定,第三:PHP的安全設定,第四:變數登入的優先順序,第五:禁止某些函數的遠端存取,第六:隱藏系統資訊,第七:開啟錯誤記錄,第八:錯誤處理,第九:刪除不該存在的紀錄,第十:資料隱碼的檢查。以上順序由一到十,是參考書籍所討論的順序,個人認為是由預防到救援的階段,一開始透過一些已知的工作,可以預防部分的問題,慢慢的進入到錯誤處理之後,就是救援的階段了。這在設計程式上,必須一段一段的來做,不可能一次就寫出完美的商業層程式,也就是說,先把架構完成,然後開始檢查權限的問題,下一步就是檢查CGI的設定,以此類推,經過十道手續後,才算把商業層的程式碼完成。

『資料層』在這裡討論的部分有關於硬體跟軟體之間的配合,也就是系統架構。依照不同硬體的負荷能力,可分為單台與多台分散式的模型。但都要搭配備援主機及備份主機,而備份主機最好採取異地備份的方式,較為安全。而與商業層溝通的時候,驗證機制最為重要。資料層不與檢視層直接溝通,因為那會造成可能的危機,因此只與商業層溝通,由商業層負責控制(Control)資料層的存取,所以有很多的驗證機制可以選擇。還有在處理多國語言的時候,編碼問題是要特別去考量的,有些編碼不但會造成處理上的盲點,還會造成效率上的問題。更細一點,資料庫的系統要與資料庫的內容分開放置,系統規系統運作,而內容規內容紀錄,不要擺放在一起,這避免磁碟效率影響。

綜觀而論,要實作的話每一層都必須要有多位專業人員負責,一個人實在無法在短期內可以將每一層都做到完美,因此依照不同的專業,應該要將各層所需的項目逐一列清單出來,一一畫分工作區塊,才有可能達成。進而由各層的測試,進入到整合測試階段。整合測試階段結束後,如何維護運作等等的相關問題,還會不斷的接踵而來。想要建置大型網站,真是一件必須深思熟慮的事情。


參考(Reference):
1. 廣川 類、桑村 潤,PHP5徹底研究,博碩文化,20069
2. Cristian DarieMihai BucicaPHP5 and MySQL購物網站開發技術,博碩文化,2005/09/14

3. 陳湘揚、陳國益,PHP5+MYSQL網頁系統開發設計,博碩文化,2006/06/22

Popular posts from this blog

Python 日期與時間的處理

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Python 日期與時間的處理

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

Image

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Image

數位影像處理:最佳化處理策略之快速消除扭曲演算法

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (04. 人事考勤管理系統)

Image

用10種程式語言做影像二值化(Image binarization)

Visual Basic 6.0 (VB6) 程式語言案例學習 (07. 收據列印程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (03. 場地預約系統)

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (11. 生產線拍照程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (06. 題庫測驗系統)

Image