架构师训练营第 7 周学习总结
性能测试
* 主观/客观视角
* 性能测试指标
* 响应时间:完成一次请求花费的时间
* 并发数:同时处理的请求数
吞吐量(单位时间完成的请求数) = 1000 / 响应时间ms 并发数
* 性能计数器:CPU、内存、磁盘、网络使用率
* 性能测试方法
* 性能测试
* 负载测试
* 压力测试
* 稳定性测试
全链路压测
* 数据构造:线上数据脱敏,数据预测,限流调用
* 数据隔离:逻辑隔离(特殊标识), 虚拟隔离(mock), 物理隔离
* 流量构造:流量平台,运营商CDN节点执行压测
性能优化的分层思想
* 两个基本原则
* 你不能优化一个没有测试的软件
* 你不能优化一个你不了解的软件
* 一般方法
* 性能测试,获得性能指标
* 指标分析,发现性能与资源瓶颈点
* 架构与代码分析,寻找性能与资源瓶颈关键所在
* 架构与代码优化,优化关键技术点,平衡资源利用
* 性能测试,进入性能优化闭环
* 分层思想
* 机房与骨干网络
* 异地多活的多机房架构
* 专线网络与自主CDN建设
* 服务器与硬件
* 更优的CPU、磁盘、内存、网卡
* 1G网卡 => 10G网卡
* 操作系统
* Linux关闭transparent huge page
* 虚拟机
* 基础组件
* 软件架构:缓存、异步和集群
* 软件代码
操作系统如何处理并发请求
* 进程/线程分时执行
* 线程栈保存状态
* 线程安全
* 临界区阻塞可能会引起系统崩溃
* 限流、降级、反应式
锁原语CAS与各类锁
* if V = E, then V = N; else nothing
* CAS 系统原语,执行时是连续的,不允许被中断
* 偏向锁:同步代码被一个线程访问,该线程自动获取锁,降低获取锁的代价
* 轻量级锁:另一个线程尝试获取的锁是偏向锁时,偏向锁会升级成轻量级锁,其他线程会通过自旋尝试获取,不会阻塞
* 重量级锁:当自旋到一定次数还未获取,线程进入阻塞,锁升级为重量级锁,重量级锁会让其他申请的线程进入阻塞
* 多CPU情况下的锁
* 总线锁:LOCK#信号独占内存
* 缓存锁:缓存一致性,回写内存被修改时使修改无效
* 公平锁 v.s. 非公平锁
* 可重入锁: synchronize锁
* 互斥锁 v.s. 共享锁
* 读写锁
* 悲观锁 v.s. 乐观锁
* 分段锁
* 自旋锁
异步编程框架akka
* Akka用Scala语言编写,同时提供了Scala和Java的开发接口
* Akka处理并发的方法基于Actor模型,Actor之间通信的唯一机制就是消息传递
* 异步、非阻塞、高性能的事件驱动编程模型
* 1GB内存可容纳百万级别个Actor
* 提供了一套容错机制,允许在Actor出现异常时进行一些恢复或重置操作
评论