什么是网站架构?

网站架构一般被认为是根据客户需求分析的结果,准确定位网站的目标群体,设定网站的整体框架,规划设计网站栏目及其内容,制定网站开发流程和顺序,从而最大限度地进行高效资源分配和管理的设计。其内容有三种表现形式:程序架构、表现架构和信息架构。步骤主要分为两个步骤:硬架构和软架构。网络体系结构是现代网络学习和发展必不可少的基础技术。

中文名

网站架构

人们普遍认为

根据客户需求分析的结果

规划

网站开发过程和顺序

内容

程序架构、表示架构

快的

航行

软建筑的八种方案

硬架构

计算机房的选择

在选择机房的时候,根据网站用户的地域分布,可以选择网通或者电信机房,但更多的时候,双线机房可能比较合适。城市越大,机房越贵。从成本上看,服务器可以托管在一些中小城市。比如北京的公司可以考虑在天津、廊坊等地托管服务器,虽然不是特别远,但是价格会便宜很多。

带宽的大小

通常老板付钱给我们建网站的时候会给我们一些目标,比如网站要能承受每天654.38+0万的PV访问量。这个时候,我们需要估算一下需要多少带宽。带宽的计算主要涉及两个指标(峰值流量和页面大小)。我们不妨在计算前做必要的假设:

首先,假设峰值流速是平均流速的五倍。

第二:假设每次访问的平均页面大小约为100K字节。

如果1万PV的访问量平均分布在一天内,相当于每秒12次左右的访问量。如果每次访问的平均页面大小约为100 K字节,那么这12次访问的总和约为1200K字节,字节的单位为byte,带宽的单位为bit。它们之间的关系是1Byte = 8bit,所以1200K Byte大致相当于9600K bit,也就是9Mbps。事实上,我们的网站必须能够在流量高峰期维持正常访问,所以按照假设的流量峰值,真实的带宽需求应该在45Mbps左右。

当然,这个结论是基于上面提到的两个假设。如果你的实际情况和这两个假设不一样,结果就不一样了。

服务器的划分

先看看我们需要哪些服务器:图片服务器、页面服务器、数据库服务器、应用服务器、日志服务器等等。

对于一个访问量很大的网站来说,把单独的图片服务器和页面服务器分开是相当必要的。我们可以使用lighttpd运行图片服务器,使用apache运行页面服务器。当然,我们也可以选择别的。甚至,我们可以扩展到很多图片服务器,很多页面服务器,设置相关域名,比如img.domain,www.domain,页面中的图片路径都使用绝对路径,比如

数据库服务器是最重要的,因为网站的瓶颈问题十有八九是数据库。一般中小型网站多采用MySQL数据库,但其聚类功能似乎还没到稳定阶段,在此不做评论。一般来说,使用MySQL数据库时,要有主从(一主多从)结构。主数据库服务器采用innodb表结构,从数据服务器采用myisam表结构,充分发挥各自的优势。而且这种主从结构将读写操作分开,减轻了读操作的压力,甚至我们可以设置专门的从服务器作为备份服务器,方便备份。否则,如果你只有一台主服务器,那么在数据量很大的情况下,mysqldump基本没希望。如果直接复制数据文件,在复制之前必须停止数据库服务,否则备份文件会出错。但对于很多网站来说,哪怕数据库服务只停一秒钟,也是不可接受的。如果有从数据库服务器,备份数据时,可以在备份前停止服务(slave stop),然后启动服务(slave start),然后从服务器会自动同步来自主服务器的数据,不会有任何影响。但是主从结构也有致命的缺点,就是主从结构只是降低了读操作的压力,而不能降低写操作的压力。

为了适应更大的规模,可能只剩下最后一招:横向/纵向拆分数据库。所谓横向拆分数据库,就是将不同的表保存到不同的数据库服务器上,比如用户表保存在A数据库服务器上,文章表保存在B数据库服务器上。当然这样的拆分是有代价的,最基本的是不能做左连接之类的操作。所谓垂直划分的数据库,一般是指按照用户标识(user_id)等划分数据存储的服务器。比如我们有五台数据库服务器,“user_id% 5+1”等于1,就保存到服务器1,如果等于2,就保存到服务器2,以此类推。但是,和数据库的横向分割一样,数据库的纵向分割也是有代价的。最基本的是,我们在做计数、求和等汇总运算时会有很多麻烦。综上所述,数据库服务器的解决方案通常是根据情况采用混合解决方案,以充分发挥各种解决方案的优势,有时还需要memcached等第三方软件来满足更多访问的要求。

有专门的应用服务器运行PHP脚本是最合适的,所以我们的页面服务器只能保存静态页面,我们可以为应用服务器设置app.domain等一些域名,以区别于页面服务器。至于应用服务器,我更喜欢在prefork模式下使用apache,必要时使用xcache等PHP缓存软件。加载的模块越少越好。除了mod_rewrite等必要的模块之外,所有不必要的东西都被丢弃,尽量减少httpd进程的内存消耗,而图像服务器、页面服务器等那些静态的内容可以用lighttpd或者tux来做,充分发挥各种服务器的特点。

如果条件允许,独立的日志服务器也是必要的。一般小网站的做法是将页面服务器和日志服务器合二为一,cron会在凌晨流量小的时候运行前一天的日志计算。但如果使用awstats等日志分析软件,即使按日归档百万访客,计算起来也会消耗大量时间和服务器资源,因此将单独的日志服务器分离出来是有好处的,不会影响官方服务器的工作状态。

软建筑

框架的选择

PHP框架有很多选项,如CakePHP、Symfony、Zend Framework等。至于应该用哪一个,没有唯一的答案,这取决于团队成员对每个框架的了解程度。很多时候,即使不使用框架,依然可以写出好的程序。比如Flickr,据说是用Pear+Smarty这样的类库写的。所以,是否使用框架一般不是最重要的。重要的是我们在编程思维上要有框架意识。

分层逻辑