网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。
作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices for Speeding Up Your Web Site http://developer.yahoo.com/performance/rules.html,同时,他们还发布了一个相应的测试工具Yslow http://developer.yahoo.com/yslow/
我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。 接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。
为了跟随我进行后续的学习,你需要准备如下的开发环境和工具
这一篇我和大家讨论的是第二十条原则:Split Components Across Domains (使用多个主机来平衡负载)
【备注】我这里特别将Domain翻译为主机,而不是直译为“域”,是因为相对于“域”来说,主机更加易于理解。
我们如果想要让一个网站(或者泛指网络资源)能够被访问到,通常需要先注册一个域名(Domain Name),并且需要在域名管理界面中,创建一个或者多个主机,例如
现实的世界里,我们也确实看到很多网站会采用多主机的方式。例如有的专门处理图片,有的专门处理静态网页,有的专门处理动态网页。
通过Fiddler工具,我们很容易地发现,在请求某个页面的时候,所使用的资源来自于多少个不同的主机。
我们可以访问一下博客园的主页
在请求主页的时候,其实需要访问10个主机,分别如下
其中属于博客园自己的主机有5个(pic, static, www,common,passport ),另外5个则主要与网站分析和广告有关。前五个是为了业务的分割而实现的多主机,后面五个则是为了运营需要而增加的访问。
再来看一下新浪微博的首页,那就更加了得了。它需要访问多达39个不同的主机(Host)
Request Count: 159 Unique Hosts: 39 Bytes Sent: 107,659 (headers:107,659; body:0) Bytes Received: 253,485 (headers:48,017; body:205,468) ACTUAL PERFORMANCE -------------- Requests started at: 13:04:24.772 Responses completed at: 13:04:35.373 Sequence (clock) duration: 00:00:10.601 Aggregate Session duration: 00:00:15.248 DNS Lookup time: 5ms TCP/IP Connect duration: 4,405ms RESPONSE CODES -------------- HTTP/304: 113 HTTP/200: 45 HTTP/404: 1 RESPONSE BYTES (by Content-Type) -------------- text/html: 95,808 image/jpeg: 91,835 ~headers~: 48,017 application/json: 12,700 application/x-javascript: 3,860 image/png: 958 image/gif: 307 REQUESTS PER HOST -------------- img.t.sinajs.cn: 34 js.t.sinajs.cn: 12 ww1.sinaimg.cn: 12 3.48.web1.im.weibo.com: 10 ww4.sinaimg.cn: 9 tp2.sinaimg.cn: 8 ww3.sinaimg.cn: 6 cdn.tanx.com: 6 tp3.sinaimg.cn: 5 biz.weibo.com: 5 rs.sinajs.cn: 4 ww2.sinaimg.cn: 4 js2.t.sinajs.cn: 4 p.tanx.com: 3 beacon.sina.com.cn: 3 toruk.tanx.com: 3 tp4.sinaimg.cn: 3 a.tbcdn.cn: 2 alitui.weibo.com: 2 rm.api.weibo.com: 2 nas.im.api.weibo.com: 2 js1.t.sinajs.cn: 2 img01.taobaocdn.com: 2 log.mmstat.com: 1 ss5.sinaimg.cn: 1 cb.alimama.cn: 1 1.48.web1.im.weibo.com: 1 wk.impress.sinaimg.cn: 1 img04.taobaocdn.com: 1 weibo.com: 1 img.alimama.cn: 1 g3.ykimg.com: 1 u1.sinaimg.cn: 1 ta.sass.sina.com.cn: 1 tp1.sinaimg.cn: 1 www.taobao.com: 1 tns.simba.taobao.com: 1 vimg1.ws.126.net: 1 strip.taobaocdn.com: 1 从这个分析结果中我们也可以清楚地看到,现在新浪微博使用了很多taobao的资源。这当然与之前阿里巴巴注资新浪微博是有关系的,精准营销嘛。
如果我们仅仅是希望按照资源的类型,使用不同的服务器来处理(多服务器可以提高整体性能,也便于管理),但又不想增加多个主机。例如
那么,按照我们之前提到的做法,可能会下面这样规划
但实际上,还有一种解决方案,就是采用微软提供的Application Request Routing(ARR)模块,它里面包含了负载均衡,反向代理等功能,可以较为方便地实现这个需求
Application Request Routing模块可以通过下面地址下载
http://www.iis.net/downloads/microsoft/application-request-routing
要使用该模块,需要IIS 7.0 。