ASP.net构建大型网站

记得很多朋友问过我如何构建一个大型的.net网站.这里值得讨论的问题是----多大 ,公司曾经需要我给他们做一个每天有1000万人次访问的门户网站.而我却一直都没有开始动手做...原因很简单,,做一个这样的网站,经费少于300万是不够的.因此需求分析和启动资金成为了规划开始的关键.

        那么避开这些不谈,,如果现在已经启动构建.什么才是一个大型网站需要考虑的呢?

        首先值得注意的问题是硬件,如果这么多人访问肯定是在全国各地,,那么在关键的网络通畅的位置放置服务器,和使用信道好的网络资源成为了必须的条件.这里想必电信服务商的介绍会比我要积极,所以在此不再赘述.然后,机器的配置也需要一个慎重的考虑,因为ISAPIThreadPool的大小跟机器的性能的关系是很密切的.这里也不多做介绍.

        其次,使用IIS7.0中新加入的特性,,或者使用C/C++编写一个DLL.控制IIS中的一个输入请求.使用非托管的扩展和筛选器也是一个不错的方法.不过在大多数情况下对服务器的改进不会很明显.尤其是微软将很多实用的功能放置在相对简单的操作界面下的情况下更是如此.那么对于关键的ISAPI模块,想必大家都会问,,如何配置才能发挥WEB服务器的最大效率呢?请大家注意到,HttpExtensionProc函数中的ISAPIThreadPool单元,里面有一段代码的意思大致是:则检查线程池中线程数是否小于最大允许数值(if ThreadCount < FMax then)如果大于等于,线程池不允许再增加,直接返回nil;如果小于,则建立一个新的TISAPIThread实例,并将之加入到线程池中.而操作系统一般会使用默认的最大值.因此我们只需要在IIS中将网站大概配置好,,并且不限制ThreadCount 的最大值,就可以了.

       准备工作做完了.大家如果觉得一头雾水,可以去详细了解一下CGI的历史和ISAPI的工作原理.那么下面进入到.net部分. 很多网站优化的方案将被再次提起.

  1. 一个服务中心使用多台服务器.因为分布式运算的算法和特性,决定了在一个服务中心使用多台机器分别进行相关的操作和运算,在最大带宽允许的范围内.使机器的效率最大化是一个非常不错的解决方案.尤其是微软推出.net remoting和wcf以后更是显得特别的使人愉快.
  2. 一个主网站服务器上使用最简捷的数据结构进行操作和运算,以及最大的虚拟内存,这样可以避免因算法上的问题而导致效率低下.并且因为CLR的垃圾回首机制的问题.而必须给机器配置较大的内存容量.
  3. 在数据库的构建上必须做出详细的规划,尽可能避免因访问的数据块过大而造成的资源浪费.数据库连接池的配置也应尽量做到最好.以下是一个Sqlclient配置的例子:
    SqlConnection   con   =   new   SqlConnection("server=(local);database=&qapos;"   +   database   +   "&qapos;;uid=&qapos;"   +   uid   +   "&qapos;;pwd=&qapos;"   +   pwd   +   "&qapos;;Max   Pool   Size=100000;Min   Pool   Size=0;Connection   Lifetime=0;packet   size=32767;Connection   Reset=false;   async=true"); 
  4. 页面缓存和Cache:页面缓存可以通过webconfig文件配置其缓存策略.通过轮询的方式决定哪些内容应该被缓存在客户端.而哪些内容可以被服务端更新掉.这样使得一个面的缓存更加灵活方便.让人们访问网站的时候轻松很多.而Cache相较与Application则更加灵活方便.正如.net之父所说的那样,伟大的思想并无伟大之处.只是我们付出得更多.我们甚至可以使用双缓存(Cache)的方法来使网站访问响应的速度提高一个数量级.
  5. 异步页面:我们知道一个http请求在服务端表现为一个线程.而当一个线程在处理一个需长时处理的代码的时候,客户端的用户可不能在这一端发呆.因此我们需要给页面设置成异步处理,来减少这种不愉快的用户体验.使用异步页面可以使得服务端的线程挂起转而操作下一个请求,在用户浏览的时候再执行上一个挂起的线程.这样既节省了多余的不必要的请求节约了服务端的资源,又使得用户体验更加愉快.真是一举两得,,尤其当访问人数多的时候更是如此.

      可见.net的性能已经是目前所有同类产品中的佼佼者了,呵呵.值得注意的是,人们往往分不清楚哪些部分应该注意得更多,而操作其他部分也许会带来副作用.那么只有使用更详细的软件规划计划,和完美的UML流程才能使得我们前面所做的工作不是白费力气.强大的大局观念是一个非常好的帮助,能使你的网站在处理各种情况时都经得住大流量的访问.好了,值得注意的大的方面我就总结了这么多.其他细节和编程习惯,以及数据库的操作规范等小的方面还是靠大家在实际编程中去注意.尽量使用数据库提供的功能去解决数据库端的问题,不失为一种明知的方法.小弟不才,因为水平有限请大家多多指出我的错误.本人的e-mail:lihongdian@163.com希望大家多多指教 

posted @ 2008-02-04 09:22  罗志威  阅读(1533)  评论(0编辑  收藏  举报