架构师训练营第 0 期 - 第 7 周 - 学习总结

用户头像
关注
发布于: 2020 年 07 月 22 日

性能测试

视角

  • 主观视角:人类的感受

  • 客观视角:根据性能指标衡量出来的结果



指标

  • 响应时间

  • 并发数

  • 吞吐量: 吞吐量 = 单位时间响应次数 x 并发数

  • 性能计数器:load avg、cpu使用率、内存占用率等等指标



方法

  • 性能测试:以规划中的预期性能进行测试

  • 负载测试:不断增加负载压力直至系统中一项或多项指标接近饱和的测试

  • 压力测试:超过安全负载下的测试

  • 稳定性测试:在特定环境+一定压力的条件下,长时间持续性的测试

性能优化

基本原则

  • 你不能优化一个没有测试的软件

  • 你不能优化一个你不了解的软件



一般方法

  1. 性能测试:获得性能指标

  2. 指标分析:发现性能与资源瓶颈

  3. 架构与代码分析:寻找瓶颈问题所在

  4. 架构与代码优化:优化关键技术点,解决瓶颈问题

  5. 性能测试:进入性能优化闭环



性能优化的分层思想:

  • 机房与骨干网络的优化

  • 异地多活:高可用

  • 专线网络:低延时、高速传输

  • CDN:就近服务

  • 服务器与硬件性能优化

  • 使用更优的硬件,有时对软件性能的优化可能是数量级的。

  • 操作系统性能优化

  • 分析和查找可优化的操作系统参数

  • 虚拟机性能优化

  • 基础组件性能优化

  • 升级基础组件的版本

  • 换更优秀的其它组件

  • 软件架构优化

  • 三板斧:缓存、异步、集群

  • 缓存:主要优化读

  • 异步:主要优化写

  • 集群:加机器解决问题,需要架构的支持、需要对本系统架构原理有深刻理解

  • 软件代码优化

  • 并发编程

  • 资源复用

  • 异步编程

  • 数据结构



操作系统

程序运行时架构



操作系统多任务运行环境

  • 进程分时执行

  • 多核心

进程的运行状态

  • 运行:正在CPU上运行的状态。

  • 就绪:也称为等待状态,出CPU之外的资源都已经获得。

  • 阻塞:等待某一资源/事件发生,例如IO。即使获得CPU资源也无法运行的状态。

进程VS线程

  • 进程的切换开销大

  • 服务器应用通常是:单进程多线程

线程栈

  • 维护线程的调用关系

  • 隔离线程之间的资源

线程安全

  • 多个线程同时操作内存堆中相同的对象时,会发生冲突,这就是线程安全问题。

  • 解决方式:在临界区加锁

  • 临界区:线程访问共享内存的代码被称为临界区

  • 避免阻塞引起崩溃

  • 限流

  • 降级

  • 反应式:异步,无临界区

锁原语CAS(CompareAndSwap)

  • CAS是一种系统原语,原语的执行必须是连续的,执行过程中不允许中断。

  • CAS(V,E,N)

  • V表示要更新的变量

  • E表示预期值

  • N表示新值

  • 如果V=E,代表V符合预期E,则将V更新为新值N;否则什么也不做。

  • 总线锁与缓存锁

  • 与多和CPU的硬件架构有关,缓存锁性能更好

  • 公平锁和非公平锁

  • 是否严格按照申请顺序来分配锁

  • 可重入锁

  • 单个线程重复申请同一个锁是否会被自己锁死

  • 独享锁:

  • 互斥、唯一

  • 共享锁:

  • 允许指定数量上限的共享锁

  • 读写锁:

  • 读的时候不互斥,写的时候唯一

  • 分段锁:

  • 一种应用,细化锁的粒度,尽量避免整个数组被锁定等场景。

  • 自旋锁:

  • 不阻塞,而是进入尝试获取锁的死循环。



用户头像

关注

还未添加个人签名 2018.09.10 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 0 期 - 第 7 周 - 学习总结