构建高性能web站点-1
以下为阅读《构建高性能web站点》郭欣 著
这本书的适合读者:
1.编写web程序、关心站点性能,并且希望自己做的更加出色的开发人员
2.关心性能和可用性的web架构师
3.希望构建高性能web站点的技术负责人
4.实施web站点性能优化或者规模扩展的运维人员
5.与web性能有关的测试人员
第一章的重点总结
1.等待的真相
a) 在用户等待的时间里,大概发生了以下几部分时间:
i. 数据在网络上传输的时间:包括两个部分,浏览器端主机发出请求经过网络到达服务器的时间,服务器回应数据经过网络到达浏览器主机的时间。也称为响应时间,他的决定因素主要包括发送的数据量和网络带宽。站点服务器处理请求并回应数据的时间-
ii. 站点服务器处理请求并生成回应数据的时间。主要消耗在服务器端,包括非常多的环节,我们一般用“每秒处理请求数”指标来衡量这部分时间,也称吞吐率:单位时间内处理的请求数。影响吞吐率的因素非常多,比如服务器的并发策略、I/O模型、I/O性能、CPU核数,当然也包括应用程序本身的逻辑复杂度
iii. 浏览器本地计算和渲染的时间。主要消耗在浏览器端。依赖因素包括浏览器采用的并发策略、样式渲染方式、脚本解释器的性能、页面大小、页面组件数量、页面组件缓存状况、页面组件域名分布以及域名DNS解析等
2.瓶颈在哪里
a) 系统的瓶颈是指影响性能的关键因素,这个因素随着系统的运行又会发生不断的变化或迁移。一旦真正找到影像系统性能的主要因素,坚决对其进行调整和优化
3.增加带宽
4.减少网页中的http请求
a) 设计更简单的网页,使其包含较少的图片和脚本,但可能牺牲了美观和用户交互
b) 将多个图片合并为一个文件,利用css背景图片的偏移技术呈现在网页中,避免多个图片的下载
c) 合并javascript脚本或者css样式表
d) 充分利用http中浏览器的cache策略,减少重复下载
5.加快服务器脚本计算速度
a) 对于拥有较强商业支持的脚本语言,均有内置的优化方案。比如解释器对某个脚本程序第一次解释的时候将中间代码缓存起来,以供下次使用。
b) 对于开源类的脚本语言也有很多第三方组件提供此功能。比如php的apc组件等。下载地址:http://pecl.php.net/package/apc,参考学习:http://www.cnblogs.com/shamrocker/archive/2012/08/23/2651873.html
6.使用动态内容缓存:将动态内容的html输出结果缓存起来,成千上万的缓存文件如何存储
7.使用数据缓存:数据缓存存储在哪里呢?需要考虑多方面的因素:速度、共享、
常用缓存技术参考:http://www.cnblogs.com/softwaredevelop/archive/2010/04/07/1706322.html
8.将动态内容静态化:虽然避免了可观的重复计算,但是每次还需要调用动态脚本解释器判断缓存是否过期以及读取缓存,这似乎有些多余,而且关键消耗了不少时间
9.更换web服务器软件:有人拿着所谓的测试数据说apache已经过时,你相信吗?另一方面,你正在使用的web服务器软件也许让你无比的自豪,可你知道复杂的配置背后的本质吗?你知道为什么它仅仅在处理你的站点请求时如此出色吗?如果让你编写web服务器软件,你可以让他更快一些吗。我们必须停止盲目的选择,停止对表面现象的崇拜,我们需要学习一些稍显底层的知识来武装自己。
10.页面组件分离
11.合理部署服务器:ip,运营商等的选择
12.使用负载均衡:需要通过各种不同的方法实现web负载均衡。可能是简单的http重定向,或者是给予DNS的轮询解析,或者通过反向代理服务器来实现负载均衡调度,还可以通过lvs来组建服务器集群
13.优化数据库:1.应用程序数据访问组件设计,合理的数据表结构设计,频繁的数据库链接和释放,合理使用各种类型的索引,了解数据库存储引擎特性。将数据散列在多台主机,包括必要的冗余数据,以此来合理的分散数据库的密集访问,数据库扩展便成为我们考虑的方案
14.考虑可扩展性:可扩展性的目的是适应负载的变化
15.减少视觉等待