第七周学习性能优化 1 总结
性能测试
性能测试指标
响应时间:指应用系统从发出请求开始到收到最后响应数据所需要的时间。直观的反映了系统的“快慢”
并发数:系统能够同时处理的请求数据,这个数字也反映了系统的负载特性。
吞吐量:单位时间内系统处理的请求的数量,体现系统的处理能力。
吞吐量 = (1000 / 响应时间 ms ) * 并发数
性能计数器:描述服务器或操作系统性能的一些数据指标。包括 System Load、对象与线程数、内存使用、CPU 使用、磁盘与网络 I/O 等指标。这些指标也是系统监控的重要参数,对这些指标设置报警阈值,当监控系统发现性能计数器超过阈值时,向运维与开发人员报警,及时发现系统异常。
软件性能优化的两个基本原则
你不能优化一个没有测试的软件
只有具备性能测试才可以进行优化,性能是否需要优化,优化后是否达到预期都由性能测试指标决定。不能光看架构图就动手进行优化。
你不能优化一个你不了解的软件
对软件的架构的关键点有所了解,才可以进行优化
性能测试的主要指标
响应时间:完成一次任务花费的时间
并发数:同时处理的任务数
吞吐量:单位时间完成的任务数
性能计数器:System Load,线程数,进程数,CPU、内存、磁盘、网络使用率
性能测试的一般方法
性能指标:获得性能指标
指标分析:发现性能与资源瓶颈
架构与代码分析:寻找性能与资源瓶颈关键所在
架构与代码优化:优化关键技术点,平衡资源利用
性能测试:进入性能优化闭环
系统性能优化的分层思想(7 层模型)
机房与骨干网络
* 异地多活
* 转向网络与自主 CDN
服务器与硬件
* 使用更优的 CPU、磁盘、内存、网卡,有时远远超过代码和架构的性能优化
操作系统
* 资源利用分析
* 进程 vs 线程
* 避免阻塞导致的高并发系统崩溃:限流,降级,异步 I/O
* 锁
* 锁原语 CAS(V, E, N)
* 偏向锁、轻量级锁、重量级锁。锁的升级。
* 多 CPU 情况下的总线锁、缓存锁
* 公平锁、非公平锁
* 可重入锁
* 独享锁/互斥锁
* 共享锁
* 读写锁
* 乐观锁、悲观锁
* 分段锁
* 自旋锁
* 文件与硬盘 I/O
* B+ 树
* LSM 树
* 文件控制块
* RAID
* 分布式文件系统
虚拟机
基础组件
* Web 容器
* 数据连接池
软件架构
* 缓存
* 异步
* 集群
软件代码
* 遵循设计原则,合理运用设计模式
* 并发编程,多线程与锁
* 资源复用,线程池与对象池
* 异步编程,生产者、消费者
* 数据结构与算法
* 线性表
* 数组
* 链表
* 散列表
* 栈
* 队列
* 树
* 二叉排序树
* 红黑树
* 跳表
* 排序算法
* 动态规划
遗传算法(注意*:遗传算法得到的不是最优解)
无锁案例:异步并发分布式编程框架 Akka
简化并发(scale up)
简化分布(scale out)
简化容错(self healing)
基于 Akka 开发的大数据集群性能监控与优化系统 Dew
总结
软件工程师和用户对性能的看法可能不一致。
从用户角度看,性能是直观感受的系统响应速度快慢。用户感受的时间包括了计算机和网站服务器通信的时间、网站服务器处理的时间、用户计算处理响应数据的时间。在实践中,前端优化手段(优化页面、浏览器异步请求处理、压缩、浏览器缓存、CDN、反向代理等)可以在很大程度上改善用户视角下的网站性能。
开发人员关注的是响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标。主要优化手段有缓存加速数据读取、集群提高吞吐能力、异步消息加快请求响应及实现削峰、优化代码等。
运维人员关注的是基础设施性能和资源利用率,例如网络运营商的带宽能力、服务器硬件的配置、服务器和网络的资源利用率等。主要优化手段有建设优化骨干网、使用高性价比的定制服务器、利用虚拟化技术优化资源利用等。
“性能优化的最终目的是改善用户体验。离开这个目的,追求技术上的所谓高性能是舍本逐末,没有多大意义。用户体验的快或是慢,可以通过技术手段改善,也可以通过优化交互体验改善。” —— 《大型网站技术架构:核心原理与案例分析》
评论