《构建高性能web站点》web组件分离
首先还是感叹一下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过期时间
本站遵循CC协议署名-非商业性使用-相同方式共享
转载请注明来自:何跃的博客
- 下一篇: 《构建高性能web站点》分布式缓存
- 上一篇: ubnutu下的工作
相关推荐
- 我们与这个世界的交集
- Posted on 10月31日
- Think in Coder
- Posted on 09月18日
- 分布式计算框架 Fourinone[转]
- Posted on 03月15日
- 当我们老了
- Posted on 11月06日