一 网站的高性能架构
主要问题:在用户高并发访问时,会产生很多网站性能问题;所以,网站高性能架构或者说网站性能优化的主要工作是改善高并发访问情况下的网站响应速度。
网站性能:性能这个词涉及到的面是相当大的。它既有着自己的客观指标,也涉及用户的客观感受;而且,在不同视角下,各方的关注点也不一样。本部分的主要内容就是如何构建一个高性能的网站;通过分析不同层面下的网站优化措施,从而实现在性能测试的前提下进行针对性优化。
1.1 不同视角下的网站性能
在不同视角下,各方的关注点不一样;不同视角下的网站性能标准不同,优化手段也不同。
1 用户视角下的网站性能:
从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度。这里的性能除了与请求的服务,服务端响应速度之外;还与客户端机器、浏览器和网络带宽等有关。
性能优化:这里的优化主要是优化用户感官。使用前端架构优化手段,使浏览器尽快地显示客户感兴趣的内容、尽可能近地获取页面内容,从而改善客户视角下的网站性能。
2 开发人员视角的网站性能
从开发人员角度,网站性能就是应用程序本身和其相关子系统的性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标。
性能优化:使用缓存加速数据读写;使用集群提高吞吐能力;使用异步消息加快请求响应以及削峰,使用代码优化改善程序性能。
3 运维人员视角的网站性能
从运维人员角度,网站性能就是基础设施性能的资源利用率。
性能优化:建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术优化资源利用。
1.2 网站性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
1.2.1 性能测试指标
1. 响应时间
定义:指应用执行一个操作需要的时间,包括从发出请求开始到受到最后响应的时间。响应时间是系统最重要的性能该指标,直观地反映了系统的快慢。
2.并发数
定义:指系统能够同时处理请求的数目,反映了系统的负载特性。对于网站而言,并发数即网站并发用户数,即同时提交请求的用户数。
与人数有关的数据还有网站注册用户数和网站在线用户数,其中
网站注册用户数 >> 网站在线用户数 >> 网站并发用户数
作用:在网站设计初期,运营团队需要根据自身产品对用户数进行推断,并以此作为系统非功能设计的重要依据。
3. 吞吐量
定义:指单位时间内系统处理的请求数量,体现系统的整体处理能力。
衡量指标:TPS——每秒事务数(最常用量化指标);HPS——每秒HTTP请求数;QPS——每秒查询数。
并发数、吞吐量、响应时间关系:在系统并发数从小到大过程中,系统吞吐量先逐步上升,响应时间小幅上升;达到一个极限后,吞吐量下降,响应时间快速上升;达到系统奔溃点后,系统资源耗尽,吞吐量为零,系统失去响应。
4.性能计数器
定义:描述服务器和操作系统性能的一些数据指标。
指标:系统负载——当前正在被CPU执行和等待被CPU执行的进程数目总和;内存使用、CPU使用
1.2.2 性能测试方法
分类:性能测试是总称,可细分为性能测试,负载测试,压力测试和稳定性测试。
定义:性能测试是一个不断对系统增加访问压力(增加并发请求数),以获得系统性能指标,最大负载能力,最大压力承受能力的过程。
关键位置:系统最大负载点,系统奔溃点
1.2.3 基于性能测试的性能优化策略
如果性能测试结果不能安祖设计或业务需求,就需要寻找系统瓶颈,分而治之,逐步优化。
性能分析:对用户从浏览器发出请求到数据库完成操作事务的整个经历的各个环节进行分析,排查可能出现性能瓶颈的地方,定位问题。
性能分析手法:1.检查日志,跟预期进行对比;2.检查监控数据,对影响性能的主因进行分析。
性能优化:定位问题后,就可以针对性地优化。根据网站分层架构,优化可分为Web前端性能优化、应用服务器性能优化和存储服务器性能优化这三块。下面分三节进行讲解。
1.3 Web前端性能优化
Web前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务和CDN服务等,优化手段分以下三块讲演。
1.3.1 浏览器访问优化
1. 减少HTTP请求:通过将请求所需的JavaScript和CSS合并成一个文件及图片合并等减少请求数。
2. 使用浏览器缓存:在客户端本地保存缓存
3. 启动压缩: 在服务器端对响应内容进行压缩,客户端解压,有效减少通信量。
4. CSS在最上面,JavaScript在最下面:使得渲染最先进行,JavaScript最后被执行。
5. 减少Cookie传输:减少Cookie中传输的数据量;并用独立域名部署静态资源,从而避免Cookie传输。
1.3.2 CDN加速
笔记1中已经简单介绍过CDN,CDN一般缓存被高频访问的静态资源,如图片、文件、CSS、Script脚本、静态网页等。
1.3.3 反向代理
作用:1. 位于Web服务器之前,建立屏障,有利于安全;2. 通过配置缓存加速Web请求;3. 实现负载均衡的功能。
机制:当用户第一次访问某资源时,将该资源缓存在反向代理服务器上;这样其他用户就可以直接从反向代理服务器上获取该资源。对于反向代理中的动态内容,通过内部通知机制重新加载并缓存。
1.4 应用服务器性能优化
应用服务器处理网站业务;这里部署了网站的业务代码,是网站开发最复杂,最多变的地方;优化手段主要有缓存、集群、异步等。
1.4.1 分布式缓存
在网站应用中,缓存几乎无处不在;也近乎无所不能。
网站性能优化第一定律: 有限考虑使用缓存优化性能。
缓存的定义和使用前提在笔记1中已经提及:
缓存:将数据放在举例计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。
缓存的两大前提:1. 数据访问热点不均匀;2. 数据在某个时间段内有效