写点什么

架构师训练营第七周 - 总结

用户头像
Eric
关注
发布于: 2020 年 07 月 22 日
架构师训练营第七周 - 总结

本周主题是性能优化

性能测试

性能测试指标

  • 响应时间:指应用系统从发出请求开始到收到最后响应数据所需要的时间。直观的反映了系统的“快慢”

  • 并发数:系统能够同时处理的请求数据,这个数字也反映了系统的负载特性。

  • 吞吐量:单位时间内系统处理的请求的数量,体现系统的处理能力。

吞吐量 = (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、反向代理等)可以在很大程度上改善用户视角下的网站性能。



开发人员关注的是响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标。主要优化手段有缓存加速数据读取、集群提高吞吐能力、异步消息加快请求响应及实现削峰、优化代码等。



运维人员关注的是基础设施性能和资源利用率,例如网络运营商的带宽能力、服务器硬件的配置、服务器和网络的资源利用率等。主要优化手段有建设优化骨干网、使用高性价比的定制服务器、利用虚拟化技术优化资源利用等。



“性能优化的最终目的是改善用户体验。离开这个目的,追求技术上的所谓高性能是舍本逐末,没有多大意义。用户体验的快或是慢,可以通过技术手段改善,也可以通过优化交互体验改善。” —— 《大型网站技术架构:核心原理与案例分析》



用户头像

Eric

关注

给写代码的人写代码 2017.10.17 加入

Clojure

评论

发布
暂无评论
架构师训练营第七周 - 总结