如何使用PHP建立大型网站之心得报告

本文为转载内容
作者:赖岱佑
标题:如何使用PHP 建立大型网站之心得报告
这篇文章实属心得报告,也就是调查报告。本人只有中型网站的经验,并没有大型网站建置经验。所谓中型定义为同时上线人数1000 人以上,而大型网站定义为10000 人以上。而使用的技术为PHP ,这也是超大型网站所使用的语言,例如:YA!HOO 。因为本人有幸参与大型网站建置计画,因此特别去调查相关建置的资讯及方案。而所汇整而成的一篇报告,供大家参考。

首先要建构大型网站,必须先考量这个入口有何影响,并且采用几层的架构。基本上采用三层式架构即可,这个想法与N 层架构相差甚大,原因在于大型网站要进出的有效率,采用N 层架构则会影响到效率的问题。而经过实验三层式架构即可,而这三层架构并非我们一般所谈的三层架构,而是大型网站的三层式架构,分别为『检视层』、『商业层』、『资料层』,其实这与软体工程所提的『MVC 模式』有异曲同工之妙。所谓『检视层』就是只做为一个大型网站的介面,就像入口网站一样,有数台的分散式的入口主机,或是单台的入口主机。而入口主机还必须搭配术台的『媒体伺服器』,因入口主机只负责进出一些资料量较小的操作,而大量的图片则分散的交由『媒体伺服器』来负责。这样可以避免入口主机被大量的图片而拖垮。在『商业层』的部分,负责处理接收自『检视层』的讯息,并且经过商业逻辑加以处理后回应,或者自各『资料层』伺服器中存取资料。『商业层』还必须顾及到安全性的问题,因此在撰写程式的时候有许多要注意的地方,这些会在文中其他节讨论。而『资料层』运作可采取分散式的做法,或是单台资料库的做法,这取决于硬体设备,当然少不了备援主机以及备份主机,而且固定时间采用异地备份的方式,才是比较安全的方法。

『检视层』在设计时要注意几点,本人大致整理如述。首先区分伺服器端与客户端的程式码,能够在客户端上运作的程式码,尽量采用。把负载分给客户端,减轻『检视层』的负荷。其次,使用『样板』设计,为的是要分离『静态的内容』与『动态的程式码』,其原因是PHP 内『静态内容』与『动态程式』是无法采取并行作业,因此效率不高,所以才要使用『样板』来做设计。Smarty 就是个很好的选择。最后,『检视层』内的媒体内容,要有分散的能力,否则会因为要传输大量媒体内容,而拖垮『检视层』的入口主机。

『商业层』以PHP 的观点来看,有几个重点工作。第一:权限,第二:CGI 的设定,第三:PHP 的安全设定,第四:变数登入的优先顺序,第五:禁止某些函数的远端存取,第六:隐藏系统资讯,第七:开启错误记录,第八:错误处理,第九:删除不该存在的纪录,第十:资料隐码的检查。以上顺序由一到十,是参考书籍所讨论的顺序,个人认为是由预防到救援的阶段,一开始透过一些已知的工作,可以预防部分的问题,慢慢的进入到错误处理之后,就是救援的阶段了。这在设计程式上,必须一段一段的来做,不可能一次就写出完美的商业层程式,也就是说,先把架构完成,然后开始检查权限的问题,下一步就是检查CGI 的设定,以此类推,经过十道手续后,才算把商业层的程式码完成。

『资料层』在这里讨论的部分有关于硬体跟软体之间的配合,也就是系统架构。依照不同硬体的负荷能力,可分为单台与多台分散式的模型。但都要搭配备援主机及备份主机,而备份主机最好采取异地备份的方式,较为安全。而与商业层沟通的时候,验证机制最为重要。资料层不与检视层直接沟通,因为那会造成可能的危机,因此只与商业层沟通,由商业层负责控制(Control )资料层的存取,所以有很多的验证机制可以选择。还有在处理多国语言的时候,编码问题是要特别去考量的,有些编码不但会造成处理上的盲点,还会造成效率上的问题。更细一点,资料库的系统要与资料库的内容分开放置,系统规系统运作,而内容规内容纪录,不要摆放在一起,这避免磁碟效率影响。

综观而论,要实作的话每一层都必须要有多位专业人员负责,一个人实在无法在短期内可以将每一层都做到完美,因此依照不同的专业,应该要将各层所需的项目逐一列清单出来,一一画分工作区块,才有可能达成。进而由各层的测试,进入到整合测试阶段。整合测试阶段结束后,如何维护运作等等的相关问题,还会不断的接踵而来。想要建置大型网站,真是一件必须深思熟虑的事情。

参与评论