架构师训练营第 0 期 - 第 7 周 - 学习总结
性能测试
视角
主观视角:人类的感受
客观视角:根据性能指标衡量出来的结果
指标
响应时间
并发数
吞吐量: 吞吐量 = 单位时间响应次数 x 并发数
性能计数器:load avg、cpu使用率、内存占用率等等指标
方法
性能测试:以规划中的预期性能进行测试
负载测试:不断增加负载压力直至系统中一项或多项指标接近饱和的测试
压力测试:超过安全负载下的测试
稳定性测试:在特定环境+一定压力的条件下,长时间持续性的测试
性能优化
基本原则
你不能优化一个没有测试的软件
你不能优化一个你不了解的软件
一般方法
性能测试:获得性能指标
指标分析:发现性能与资源瓶颈
架构与代码分析:寻找瓶颈问题所在
架构与代码优化:优化关键技术点,解决瓶颈问题
性能测试:进入性能优化闭环
性能优化的分层思想:
机房与骨干网络的优化
异地多活:高可用
专线网络:低延时、高速传输
CDN:就近服务
服务器与硬件性能优化
使用更优的硬件,有时对软件性能的优化可能是数量级的。
操作系统性能优化
分析和查找可优化的操作系统参数
虚拟机性能优化
基础组件性能优化
升级基础组件的版本
换更优秀的其它组件
软件架构优化
三板斧:缓存、异步、集群
缓存:主要优化读
异步:主要优化写
集群:加机器解决问题,需要架构的支持、需要对本系统架构原理有深刻理解
软件代码优化
并发编程
资源复用
异步编程
数据结构
操作系统
程序运行时架构
操作系统多任务运行环境
进程分时执行
多核心
进程的运行状态
运行:正在CPU上运行的状态。
就绪:也称为等待状态,出CPU之外的资源都已经获得。
阻塞:等待某一资源/事件发生,例如IO。即使获得CPU资源也无法运行的状态。
进程VS线程
进程的切换开销大
服务器应用通常是:单进程多线程
线程栈
维护线程的调用关系
隔离线程之间的资源
线程安全
多个线程同时操作内存堆中相同的对象时,会发生冲突,这就是线程安全问题。
解决方式:在临界区加锁
临界区:线程访问共享内存的代码被称为临界区
避免阻塞引起崩溃
限流
降级
反应式:异步,无临界区
锁
锁原语CAS(CompareAndSwap)
CAS是一种系统原语,原语的执行必须是连续的,执行过程中不允许中断。
CAS(V,E,N)
V表示要更新的变量
E表示预期值
N表示新值
如果V=E,代表V符合预期E,则将V更新为新值N;否则什么也不做。
总线锁与缓存锁
与多和CPU的硬件架构有关,缓存锁性能更好
公平锁和非公平锁
是否严格按照申请顺序来分配锁
可重入锁
单个线程重复申请同一个锁是否会被自己锁死
独享锁:
互斥、唯一
共享锁:
允许指定数量上限的共享锁
读写锁:
读的时候不互斥,写的时候唯一
分段锁:
一种应用,细化锁的粒度,尽量避免整个数组被锁定等场景。
自旋锁:
不阻塞,而是进入尝试获取锁的死循环。
评论