架构师训练营 - 第⑦周总结
性能测试:性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准,也有不同的优化手段。
主观视角:用户感受到的性能(通过一些策略在不改变软硬件性能的情况下提升感受)
客观视角:性能指标衡量的性能
性能测试指标
响应时间:从发出请求开始到收到最后响应数据的时间。直接反应系统的“快慢”
并发数:系统能够同时处理请求的数目,反应系统的负载特性(还有在线用户数和系统用户数)
吞吐量:单位时间内处理请求的数量(每秒事物数 TPS、每秒查询数 QPS、每秒 http 请求数 HPS)
吞吐量 = (1000 / 响应时间 ms)* 并发数
性能计数器:描述服务器或操作系统性能的一些数据指标,可用于监控报警
System load
对象与线程数
内存使用
磁盘与网络 I/O
性能测试方法
性能测试:以系统规划设计的性能指标为预期目标,对系统不断增加压力,验证是否达到预期
负载测试:对系统不断增加并发请求以增加系统压力,直到系统一个或多个性能指标达到安全临界点,这时候再增加压力会导致处理能力下降
压力测试:超过安全负载的情况下,对系统继续施加压力知道系统崩溃,以此获得系统最大压力承受能力。
稳定性测试:在特定软硬件网络环境条件下,模拟生产环境是系统运行一段时间,以此监测系统是否稳定。稳定性测试也应不均匀地对系统施加压力。
B 点可以作为系统的预期性能指标,此时响应时间和吞吐量之间达到当前环境的性能最优
C 点是吞吐量的峰值,系统某些性能指标达到安全临界点,超过 C 点反而性能下架
D 点是系统崩溃的点,
我们在选择软硬件时,通常以 B 点为依据,A 点到 B 点之间需要更多硬件,但系统稳定性更好,更能抵抗流量波动;B 点到 C 点之间硬件需求减少,硬件充分利用,但系统对波动的抵抗力较差。
随着并发用户数的增加,响应时间逐渐增加
基于相同的软硬件环境,响应时间等于系统设计的目标,此时并发用户数就是当前环境允许的最大并发数,即系统最大负载点 C 点
总结
系统设计时需要确定响应时间和并发数
实施时首先要确保响应时间满足要求,可以通过优化软硬件、网络和业务逻辑实现
其次要满足并发数,可以优化软硬件、网络和业务逻辑,也可以通过分布式技术依靠大规模集群提升并发能力
用户的体验提升不仅仅依靠软硬件性能的提升优化,也可以通过业务逻辑优化改变体验
全链路压测:暴露瓶颈、探测系统的真实处理能力
压测相关的业务系统众多,并牵涉到整条链路上所有的基础设施和中间件,如何确保流量畅通无阻没有死角?
构造压测数据,数据模型如何与真实贴近
从线上数据 dump、筛选、id 隔离、修正
存入压测数据池,构造数据平台
在真实环境进行模拟,如何确保对线上无影响-》数据隔离
逻辑隔离,可能污染线上数据
虚拟隔离,并不真实写入数据,可能结果不准确
物理隔离,写到隔离位置包括存储、缓存、搜索引擎等
大型促销活动所带来的巨大流量如何制作
全链路压测平台化
软件性能优化的两个基本原则
你不能优化一个没有测试的软件
你不能优化一个你不了解的软件
性能优化的一般方法
性能测试,获得性能指标
指标分析,发现性能和资源的瓶颈点
架构与代码的分析,寻找性能和资源瓶颈的关键点
架构与代码优化,优化关键技术点,平衡资源利用
性能测试,进入性能优化闭环
系统性能优化的分层思想
机房与骨干网络性能优化:异地多活机房架构、专线网络与自主 CDN 建设
服务器与硬件性能优化:更优的硬件对软件性能优化可能是数量级的
操作系统性能优化
虚拟机性能优化
基础组件性能优化:Apache、JDBC
软件架构性能优化
缓存:优化读操作
异步:及时响应,更好用户体验,控制消费速度,主要优化写操作
集群:单一服务的资源始终有限,所以需要增加更多的服务器。对使用者看起来像一台服务器
软件代码性能优化
并发编程、多线程和锁
资源复用、线程池与对象池
异步编程、生产者和消费者
数据结构、数组、链表、hash 表和树
操作系统
进程的运行期状态:运行、就绪、等待
线程 &进程
线程栈
线程安全
临界区
阻塞导致高并发系统崩溃
避免阻塞引起的崩溃:限流、降级、避免阻塞
锁原语 CAS
偏向锁、轻量级锁、重量级锁
多 CPU 情况下的锁、总线锁与缓存锁
公平锁、非公平锁
可重入锁
独享锁/互斥锁、共享锁、读写锁
分段锁(JDK concurrentHashmap):细化锁粒度
自旋锁:循环获取锁,减少上下文切换,但消耗 cpu
文件与硬盘 I/O
B+树、LSM 树
文件控制块 &linux inode 文件控制块
RAID 独立硬盘冗余阵列
分布式文件系统 HDFS
评论