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

发布于: 14 小时前
架构师训练营 - 第⑦周总结
性能测试:性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准,也有不同的优化手段。
  • 主观视角:用户感受到的性能(通过一些策略在不改变软硬件性能的情况下提升感受)

  • 客观视角:性能指标衡量的性能

性能测试指标
  • 响应时间:从发出请求开始到收到最后响应数据的时间。直接反应系统的“快慢”

  • 并发数:系统能够同时处理请求的数目,反应系统的负载特性(还有在线用户数和系统用户数)

  • 吞吐量:单位时间内处理请求的数量(每秒事物数TPS、每秒查询数QPS、每秒http请求数HPS)

  • 吞吐量 = (1000 / 响应时间ms)* 并发数

性能计数器:描述服务器或操作系统性能的一些数据指标,可用于监控报警
  • System load

  • 对象与线程数

  • 内存使用

  • 磁盘与网络I/O

性能测试方法
  • 性能测试:以系统规划设计的性能指标为预期目标,对系统不断增加压力,验证是否达到预期

  • 负载测试:对系统不断增加并发请求以增加系统压力,直到系统一个或多个性能指标达到安全临界点,这时候再增加压力会导致处理能力下降

  • 压力测试:超过安全负载的情况下,对系统继续施加压力知道系统崩溃,以此获得系统最大压力承受能力。

  • 稳定性测试:在特定软硬件网络环境条件下,模拟生产环境是系统运行一段时间,以此监测系统是否稳定。稳定性测试也应不均匀地对系统施加压力。

  1. B点可以作为系统的预期性能指标,此时响应时间和吞吐量之间达到当前环境的性能最优

  2. C点是吞吐量的峰值,系统某些性能指标达到安全临界点,超过C点反而性能下架

  3. D点是系统崩溃的点,

  4. 我们在选择软硬件时,通常以B点为依据,A点到B点之间需要更多硬件,但系统稳定性更好,更能抵抗流量波动;B点到C点之间硬件需求减少,硬件充分利用,但系统对波动的抵抗力较差。

  1. 随着并发用户数的增加,响应时间逐渐增加

  2. 基于相同的软硬件环境,响应时间等于系统设计的目标,此时并发用户数就是当前环境允许的最大并发数,即系统最大负载点 C点

总结

  1. 系统设计时需要确定响应时间和并发数

  2. 实施时首先要确保响应时间满足要求,可以通过优化软硬件、网络和业务逻辑实现

  3. 其次要满足并发数,可以优化软硬件、网络和业务逻辑,也可以通过分布式技术依靠大规模集群提升并发能力

  4. 用户的体验提升不仅仅依靠软硬件性能的提升优化,也可以通过业务逻辑优化改变体验

全链路压测:暴露瓶颈、探测系统的真实处理能力
  • 压测相关的业务系统众多,并牵涉到整条链路上所有的基础设施和中间件,如何确保流量畅通无阻没有死角?

  • 构造压测数据,数据模型如何与真实贴近

  • 从线上数据dump、筛选、id隔离、修正

  • 存入压测数据池,构造数据平台

  • 在真实环境进行模拟,如何确保对线上无影响-》数据隔离

  • 逻辑隔离,可能污染线上数据

  • 虚拟隔离,并不真实写入数据,可能结果不准确

  • 物理隔离,写到隔离位置包括存储、缓存、搜索引擎等

  • 大型促销活动所带来的巨大流量如何制作

  • 全链路压测平台化

软件性能优化的两个基本原则

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

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

性能优化的一般方法
  • 性能测试,获得性能指标

  • 指标分析,发现性能和资源的瓶颈点

  • 架构与代码的分析,寻找性能和资源瓶颈的关键点

  • 架构与代码优化,优化关键技术点,平衡资源利用

  • 性能测试,进入性能优化闭环

系统性能优化的分层思想
  • 机房与骨干网络性能优化:异地多活机房架构、专线网络与自主CDN建设

  • 服务器与硬件性能优化:更优的硬件对软件性能优化可能是数量级的

  • 操作系统性能优化

  • 虚拟机性能优化

  • 基础组件性能优化:Apache、JDBC

  • 软件架构性能优化

  • 缓存:优化读操作

  • 异步:及时响应,更好用户体验,控制消费速度,主要优化写操作

  • 集群:单一服务的资源始终有限,所以需要增加更多的服务器。对使用者看起来像一台服务器

  • 软件代码性能优化

  • 并发编程、多线程和锁

  • 资源复用、线程池与对象池

  • 异步编程、生产者和消费者

  • 数据结构、数组、链表、hash表和树

操作系统
  • 进程的运行期状态:运行、就绪、等待

  • 线程&进程

  • 线程栈

  • 线程安全

  • 临界区

  • 阻塞导致高并发系统崩溃

  • 避免阻塞引起的崩溃:限流、降级、避免阻塞

  • 锁原语CAS

  • 偏向锁、轻量级锁、重量级锁

  • 多CPU情况下的锁、总线锁与缓存锁

  • 公平锁、非公平锁

  • 可重入锁

  • 独享锁/互斥锁、共享锁、读写锁

  • 分段锁(JDK concurrentHashmap):细化锁粒度

  • 自旋锁:循环获取锁,减少上下文切换,但消耗cpu

文件与硬盘I/O
  • B+树、LSM树

  • 文件控制块&linux inode文件控制块

  • RAID独立硬盘冗余阵列

  • 分布式文件系统HDFS

用户头像

牛牛

关注

还未添加个人签名 2018.02.27 加入

还未添加个人简介

评论

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