第二篇 架构
4 瞬时响应:网站的高性能架构
4.1 网站性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
4.1.1 不同视角下的网站性能
- 用户视角的网站性能:用户计算机和网站服务器通信的时间+网站服务器处理的时间+用户计算机浏览器构造请求解析响应数据的时间
- 开发人员视角的网站性能:响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标
- 运维人员视角的网站性能:基础设施性能和资源利用率
4.1.2 性能指标测试
- 响应时间:从发出请求开始到收到最后响应数据所需要的时间
- 并发数:指系统能够同时处理请求的数目,这个数字也反映了系统的负载特性
- 吞吐量:值单位时间内系统处理的请求数量,体现系统的整体处理能力
- 性能计数器:描述服务器或操作系统性能的一些指标
4.1.3 性能测试方法
- 性能测试
- 负载测试
- 压力测试
- 稳定性测试
4.1.4 性能测试报告
4.1.5 性能优化策略
- 性能分析(分析日志)
- 性能优化
4.2 Web前端性能优化
一般说来Web前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有优化浏览器访问、使用反向代理、CDN等。
4.2.1 浏览器访问优化
- 减少http请求:合并CSS、合并JavaScript、合并图片。将浏览器一次访问需要的JavaScript、CSS合并成一个文件;图片也可以合并,多张图片合并成一张。
- 使用浏览器缓存:静态资源缓存在浏览器中。
- 启用压缩:在服务器端对文件进行压缩,在浏览器端对文件解压缩,减少传输量。
- CSS放在页面最上面、JavaScript放在页面最下面:浏览器会在下载完全部CSS之后才对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。
- 减少Cookie传输
4.2.2 CDN加速
CDN(Content Distribute Network,内容分发网络)的本质仍然是一个缓存,而且将数据缓存在里用户最近的地方,使用户以最快速度获取数据。
CDN能够缓存的一般是静态资源。
4.2.3 反向代理
传统代理服务器位于浏览器一侧,代理l浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求。
安全功能+通过缓存加速Web请求。
有些热门的帖子、词条、博客可缓存在代理服务器上。
4.3 应用服务器性能优化
应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多的地方,优化手段主要有缓存、集群、异步等。
4.3.1 分布式缓存
网站性能优化第一定律:优先考虑使用缓存优化性能
缓存的基本原理
缓存的本质是一个内存Hash表。网站数据访问通常遵循二八定律,即80%的访问落在20%的数据上,因此利用Hash表和内存的高速访问特性,将这20%的数据缓存起来,可以很好地改善系统的性能,提高数据读取速度,降低存储访问压力。
合理使用缓存
- 频繁修改的数据
- 没有热点的访问
- 数据不一致与脏读
- 缓存可用性:可通过缓存热备等手段提高缓存的可用性
- 缓存预热
- 缓存穿透
分布式缓存架构
分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务。其架构方式有两种,一种是以JBoss Cache为代表的需要更新同步的分布式缓存;一种是以MemCached为代表的不互相通信的分布式缓存。
Memcached
- 简单的通信协议
- 丰富的客户端程序
- 高性能的网络通信
- 高效的内存管理
- 互不通信的服务器集群架构
4.3.2 异步操作
任何可以晚点做的事情都应该晚点再做
4.3.3 使用集群
在网站高并发访问的场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。
4.3.4 代码优化
- 多线程
- 资源复用:单例、对象池
- 数据结构
- 垃圾回收
4.4 存储性能优化
4.4.1 机械硬盘 vs. 固态硬盘
4.4.2 B+树 vs. LSM树
4.4.3 RAID vs. HDFS