《性能之巅:洞悉系统、企业与云计算》读书笔记-Part 1

本文是读书笔记第一部分,包括原书第一、二章。

绪论

性能是一门令人激动的,富于变化同时又充满挑战的学科。

系统性能

单台服务器上的通用系统软件栈
在这里插入图片描述

人员

系统性能是一项需要多类人员参与的工程。

事情

关于性能的理想执行顺序排列如下:

  1. 设置性能目标和建立性能模型
  2. 基于软件或硬件原型进行性能特征归纳
  3. 对开发代码进行性能分析(软件整合之前)
  4. 执行软件非回归性测试(软件发布前或发布后)
  5. 针对软件发布版本的基准测试
  6. 目标环境中的概念验证(Proof-of-concept)测试
  7. 生产环境部署的配置优化
  8. 监控生产环境中运行的软件
  9. 特定问题的性能分析

容量规划:Capacity Planning,指的是一系列事前行动。在设计阶段,包括通过研究开发软件的资源占用情况,来得知原有设计在多大程度上能满足目标需求。在部署后,包括监控资源的使用情况,这样问题在出现之前就能被预测。

视角

两种性能分析的视角:负载分析(workload analysis)和资源分析(resource analysis),二者从不同的方向对软件栈做分析。
在这里插入图片描述

性能调优充满挑战

系统性能是一门工程学,是主观的、复杂的、多问题并存的。

性能是主观的

性能常常是主观性的。开始着手性能问题时,对问题是否存在的判断都有可能是模糊的,在问题被修复时也同样如此:被一个用户认为是不好的性能,另一个用户可能认为是好的。

一个给定指标是好或坏,取决于应用开发人员和最终用户的性能预期。

系统是复杂的

性能问题可能出在子系统之间复杂的互联上,即便这些子系统隔离时表现得都很好。也可能由于连锁故障(cascading failure)出现性能问题,这指的是一个出现故障的组件会导致其他组件产生性能问题。要理解这些产生的问题,你必须理清组件之间的关系,还要了解它们是怎样协作的。

修复一个问题可能只是把瓶颈推向系统其他地方,导致系统的整体性能并没有得到期望的提升。

解决复杂的性能问题常常需要全局性的方法。整个系统——包括自身内部和外部的交互——都可能需要被调查研究。

可能有多个问题并存

真正的任务不是寻找问题,而是辨别问题或者说是辨别哪些问题是最重要的。

性能分析必须量化(quantify,如延时,latency)问题的重要程度。某些性能问题可能并不适用于你的工作负载或只在非常小的程度上适用。理想情况下,你不仅要量化问题,还要估计每个问题修复后能带来的增速。当管理层审查工程或运维资源的开销缘由时,这类信息尤其有用。

延时

延时:测量的是用于等待的时间,可以估计最大增速(Maximum Speedup),

动态跟踪:Dynamic Tracing,可从任意感兴趣的点测量延时,还可以提供数据以显示延时完整的分布情况。

动态跟踪

动态跟踪技术把所有的软件变得可以监控,而且能用在真实的生产环境中。这项技术利用内存中的CPU指令并在这些指令之上动态构建监测数据。

在DTrace之前,系统跟踪(system tracing)常常使用静态探针(static probes):置于内核和其他软件之上的一小套监测点;观测是有限的,一般用起来很费时,需要配置、跟踪、导出数据以及最后分析一整套流程。

DTrace:第一个适用于生产环境的动态跟踪工具,提供许多其他功能,甚至包括一套自用的编程语言,D语言。DTrace对用户态和内核态的软件都提供了静态跟踪和动态跟踪,并且数据是实时产生的。

云计算

云计算架构能让应用程序均衡分布于数目不断增多的小型系统中,这让快速扩展成为可能;降低对容量规划的精确程度的要求,因为更多的容量可以很便捷地在云端添加。对性能分析的需求更高:使用较少的资源就意味着系统更少。

云计算和虚拟化技术带来新的难题:如何管理其他租户(tenant,性能隔离(Performance Isolation))带来的性能影响,以及如何让每个租户都能对物理系统做观测。举例,磁盘IO性能可能因为同邻近租户的竞争而下降,并不是每一个租户都能观察到物理磁盘的真实使用情况。

案例研究

缓慢的磁盘

/proc目录里检查磁盘错误数。

使用iostat(1)来测量IOPS、吞吐量、平均磁盘I/O延时和读写比。

软件变更

非回归性测试是用来确认软件或硬件的变更并没有让性能倒退的。

方法

在取得数据之前就把事情理论化是一个严重的错误。不理智的人扭曲事实来适应理论,而不是改变理论来适应事实。柯南·道尔《夏洛克·福尔摩斯—波西米亚丑闻》

面对一个性能不佳且复杂的系统环境时,首先需要知道的挑战就是从什么地方开始分析、收集什么样的数据,以及如何分析这些数据。

术语

核心术语:

  • IOPS:每秒发生的输入/输出操作的次数,是数据传输的一个度量方法。对于磁盘的读写,IOPS指的是每秒读和写的次数;
  • 吞吐量:评价工作执行速率,如数据传输速度(字节/秒或比特/秒)。在某些情况下(如数据库),吞吐量指的是操作的速度(每秒操作数或每秒业务数);
  • 响应时间:一次操作完成的时间。包括等待、服务、返回结果的时间;
  • 延时:延时是描述操作里用来等待服务的时间。在某些情况下,它可以指的是整个操作时间,等同于响应时间;
  • 使用率:对于服务所请求的资源,使用率描述在所给定的时间区间内资源的繁忙程度。对于存储资源来说,使用率指的就是所消耗的存储容量(例如,内存使用率);
  • 饱和度:指的是某一资源无法满足服务的排队工作量;
  • 瓶颈:在系统性能里,瓶颈指的是限制系统性能的那个资源。分辨和移除系统瓶颈是系统性能的一项重要工作;
  • 工作负载:系统的输入或者是对系统所施加的负载叫做工作负载。对于数据库来说,工作负载就是客户端发出的数据库请求和命令;
  • 缓存:用于复制或者缓冲一定量数据的高速存储区域,目的是为了避免对较慢的存储层级的直接访问,从而提高性能。出于经济考虑,缓存区的容量要比更慢一级的存储容量要小。

模型

受测系统

SUT:System Under Test,如图:
在这里插入图片描述
扰动:perturbation,会影响结果,包括定时执行的系统活动、系统其他用户、其他工作负载。扰动来源可能不是很清楚,需要细致的系统性能研究才能加以确定。

现代复杂系统(环境)的困难是系统很可能由若干个网络化的组件组成,都用于处理输入工作负载,包括负载平衡、Web服务器、数据库服务器、应用程序服务器,以及存储系统。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值