参考书籍:《大型网站技术架构核心原理与解析》
什么叫高性能网站?
从吞吐量、平均每个请求处理时间、请求响应时间来看。
这些指标是客观的,同时也是主观的,主观的感受是一个很微妙的东西,不同人感受不同。
4.1 网站性能测试
4.1.1 不同视角下的网站性能
1、用户视角的网站性能
浏览器解析html速度差异、互联网带宽差异
在实践过程中,使用一些前端优化手段:优化html样式、利用浏览器端的并发和异步特性、调整浏览器缓存策略、使用CDN服务、反向代理等手段。
2、开发人员视角的网站性能
子系统的性能、延迟、系统吞吐量、分发处理能力、系统稳定等技术指标。
3、运维人员视角的网站性能
运维人员更关注基础设施性能和资源利用率,例如带宽能力、服务器硬件配置、数据中心网络架构、服务器和带宽网络吕勇率等。
4.1.2 性能测试指标
1、响应时间
2、并发数
并发数显示了系统能同时处理请求的最大数目,反应了系统的负载特性。
测试程序通过多线程模拟并发用户的办法来测试系统的并发处理能力,每次请求随机休眠,模拟真实用户。
3、吞吐量
指单位时间内系统处理的请求数量。TPS(事务)\QPS(QUERY)\HPS(HTTP)。
4、性能计数器
描述服务器或操作性能性能的一些数据指标,包括系统负载、对象与线程数、内存使用、cpu使用、磁盘与网络IO等指标。
4.1.3 性能测试的方法
性能测试(验证在资源可接受范围内是否达到预期)、负载测试(系统某项或多项性能指标达到安全临界值)、压力测试(超过安全负载继续施压)、稳定性测试(系统加载一定业务压力,使其运行一段较长的时间,检测是否稳定)
崩溃的点不是最高点,而是d点,c点是最大负载点,再增加压力,资源耗到无法支持了,处理能力开始减弱。
4.1.4 性能测试报告
测试报告可以反映一定规律,以此判断系统是否满足要求,当然,也是要有横向参照对比的。
4.1.5 性能优化策略
1、性能分析
2、性能优化
4.2 Web前端性能优化
4.2.1 浏览器访问优化
1、减少http请求:主要手段是合并css、javascript、图片一次性请求所需资源。
2、浏览器缓存:logo、css、javascript更新频率比较低,迭代更新而不是一次更新。
3、启用压缩:文本压缩可以达到80%以上。
4、css放在页面最上面、js放在最下面。浏览器会先下载css才会渲染,js则相反,会阻塞。
5、减少cookies传输:cookies太大影响数据传输,静态资源访问,发送cookie没有意义。
4.2.2 CDN 加速
CDN能够缓存的一般是静态资源,如图片、文件、css、js脚本、静态网页等。
4.2.3 反向代理
nginx反向代理。
4.3 应用服务器性能优化
4.3.1 分布式缓存
网站优化性能第一定律:优先考虑使用缓存优化性能。
缓存本质是哈希表
**缓存主要用来存放读写比很高、变化很少的数据。**商品类目、热门词、搜索列表、热门商品信息等。
合理使用缓存:频繁修改的数据没必要缓存、没有热点的没有必要缓存、数据不一致与脏读、缓存可用性(数据库长期习惯缓存,一旦缓存崩掉数据库受不了刺激也崩了。)、缓存预热(城市、地名、类目信息等,可以在启动时加载数据库全部数据。)、缓存穿透命中低,将不存在的数据也缓存起来。
分布式缓存架构:
Memecahed
基于TCP以及简单的文本自定序列化的通信协议,后来需要nosql产品借鉴了这套协议。
丰富客户端、支持多个语言sdk、高性能网络通信Libevent事件触发的网络通信库、高效的内存管理。
4.3.2 异步操作
4.3.3 使用集群
利用负载均衡技术来构建集群对外提供服务
4.3.4 代码优化
1、多线程
从资源利用角度来看,使用多线程主要原因有两个:IO阻塞
与多个CPU
多线程编程要注意线程安全问题,并发对某个资源修改,导致数据混乱。解决这个问题可以把对象转换为无状态对象、使用局部对象、对并发访问的资源使用锁。
2、资源复用
资源复用主要两种模式:单例模式、对象池
3、数据结构
4、垃圾回收
超过某个阈值还未被释放,就放入老年代。
4.4 存储性能优化
4.4.1 机械硬盘VS固态硬盘
4.4.2 B+树与LSM树
4.4.3 RAID HDFS
4.5 小结
主观感受与技术驱动之间的平衡需要我们去思考与把握。