如何使用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