问题:
asp/php等动态建站,往往出现访问量较大后出现网站访问故障问题,问题在哪呢?
通常网站有新闻栏目,假设一个网站新闻栏目建立在/news/目录下 ,通常都有一个显示某条纪录的item.asp?id=1234,用户访问某个连接时候,往往调用这个动态脚本文件,进行打开数据库连接、查找纪录。。。等一系列动作。并发10个人没问题,100个、1000个问题就来了,导致服务器压力增大。
但实际上,由于ID为1234文章在你发布的时候,内容已经确定,所以基本上A用户访问跟B用户访问时候做的是同一个动作,内容也是一样,但是却有N次数据库打开读取动作。一般情况下,数据库操作属于高消耗系统资源的操作。
思路:
知道此原因,我们可以读一次数据库,然后将读取得内容存储为静态页面,以后的访问读取此静态页面。这是提高站点并发访问的基本措施。一台普通的PC服务器处理静态页面访问,一天可以达到700W 此请求。
但是,可能很多站点已经在设计时就属于动态建站考虑,所以包括连接、导航等依赖于动态模式,全部改成类似新浪、搜狐等静态发布模式不恰当,所以需要在不改变整体站点访问结构上进行调整。
具体方案:
对类似 /item.asp?ID=1234 这样的asp程序进行以下修改:
1、拷贝一份这样的文件,假设名为item_bak.asp
2、将Content.asp代码首处做以下修改:
ID=request("ID")
txtfile="Item_" + cstr(ID)+".htm"
if FileExist(txtfile) then
else
GenHTML(txtfile,"Item_bak.asp?id="+cstr(ID))
end if
response.redirect txtfile
response.end
其中函数FileExist为判断 txtfile文件是否存在于服务器上,函数GenHTML为 利用xmlhttp服务器端组件将读取item_bak.asp?id=1234的文件的html内容后写在服务器上的当前目录。
这样,每一篇文章就会仅被读取数据库一次,然后之后所有的访问都被定向到静态html文件,缓解服务器压力。
总结:
唯一的不足是会增加硬盘空间需求。
但是基本上不会造成连接混乱,严守原来布局。