《构建高性能web站点》web组件分离

作者:heyue 时间:2011-05-02 分类:互联网技术 评论:0条 浏览:3139

首先还是感叹一下http设计的牛逼之处,http是天然的分布式,它造就了互联网应用的扩展如此的容易,一个很小规模的应用可以很容易就扩展开来。

web组建分离就是把页面上的每个资源按照自己特有的属性分开,由不同的服务器来处理。分开的原因分服务器的原因和浏览器的原因,浏览器的原因是浏览器在统一个域名下并发请求数的限制,比如ie6是2,这个确实很2的,10年前设计自然跟不上现在的需求,服务器端主要资源的属性不一样,有的需要很多cpu计算,有的基本不用cpu,所以需要分开处理。

总结1:web组建的需要考虑的不同的属性

  • 文件大小
  • 文件数量
  • 内容更新频率
  • 预计并发用户
  • 是否需要脚本解释
  • 是否有大量cpu计算
  • 是否需要连数据库
  • 对数据库的操作是读还是写

对应的需要在服务器端考虑的一些策略

  • 是否需要epoll模型
  • 是否使用sendfile发送文件
  • 是否使用异步IO
  • 是否使用HTTP长连接
  • 是否需要oopcode
  • 缓存有效期多长
  • 是否使用浏览器缓存,时间多长
  • 是否使用反响代理缓存,时间多长
  • 是否负载均衡

总结2:组件分离的域名处理

如果没有多余的域名,最好也做一些组件分离的工作。独立域名的好处,不用传送cookie,减少流量,其实这个很重要,又的图片资源很少,但是浏览器必须把硕大的cookie发过去,太浪费了。

总结3:浏览器并发连接数

可以在这个网站看各种浏览器的请求的瀑布图 http://site-perf.com/

浏览器默认最大并发连接数
浏览器 HTTP 1.1 HTTP 1.0
IE 6,7 2 4
IE 8 6 6
Firefox 2 2 8
Firefox 3 6 6
Safari 3, 4 4 4
Chrome 1,2 6 ?
Chrome 3 4 4
Opera 9.63,10.00alpha 4 4

总结3:各种不同资源的不同的处理方法

1.动态页面

  • 开启opcode
  • 提供足够快的CPU、足够大的内存,尽量不要用到swap
  • 多进程,但是不要太多,这个需要精确计算或者从日志中分析,以免上下文切换的时间浪费过多
  • 与数据库、cache保存高速连接

2.静态页面(IO密集型)

  • 支持epoll
  • 非阻塞IO
  • 异步IO
  • 使用sendfile
  • 但进程(避免进程切换的开销)
  • 使用高速磁盘
  • 用raid分区,这样可以提高读取数据的速度
  • 购买足够的带宽,因为是IO密集型,如果带宽太小,会导致在交换机路由器那里等待

3.图片、css、js

  • 长连接,因为web的图片很小,而且一般需要同时传输很多张
  • 设置较长的expires过期时间

相关推荐
更多