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