架构设计70-质量管理02-性能优化01-介绍

简介: 架构设计70-质量管理02-性能优化01-介绍
+关注继续查看

架构设计系列文章,请参见连接。

背景

性能优化是技术治理的一部分,也是体现出技术人员真正价值的工作。从经验来看对于性能优化的认识与过程了解影响着系统的可持续发展的能力,正因如此性能优化就决定了系统是否可以有序的发展为一个优良的系统。在性能优化过程中对于系统中瓶颈的识别以及解决就成了性能优化的需求与目标。

性能优化会有几篇文章,分别说明性能优化的不同的内容,包括:环境定义,测试策略,测试过程,测试工具,优化办法。而对于性能优化来说整体步骤可以简单的划分为:$\color{red}{性能测试}$->$\color{red}{性能分析}$->$\color{red}{性能优化}$。

性能测试

性能优化过程中性能测试是发现问题的过程,是性能优化的先决条件。根据克努特优化原则:过早优化是万恶之源。在没有实际数据指导的情况下就开启优化过程是很不明智的过程,而且很容易方向跑偏。所以,必须在明确的数据作为支撑的情况下再开始进行性能优化过程。

虽然经常能够听到性能测试这个词,但是在这个词背后具体包含哪些内容,在未经过深入了解时也不可能一目了然的知道。这里就本着技术的深度决定着成就的高度的态度,重新挖掘一下性能测试的内容。

  • 性能测试定义

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

  • 性能测试分类

下面一段来自百度百科中《性能测试》。根据不同的测试目的,性能测试可以分为多种类型,常见的有如下几类:

  • 负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
  • 压力测试(Stress Testing):强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
  • 容量测试(Volume Testing):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
  • 性能测试类型:

下面一段来自百度百科中《性能测试》。性能测试中包含以下测试类型:

  • 基准测试:比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。
  • 争用测试:核实测试对象对于多个主角对相同资源(数据记录、内存等)的请求的处理是否可以接受。
  • 性能配置:核实在操作条件保持不变的情况下,测试对象在使用不同配置时其性能行为的可接受性。
  • 负载测试:核实在保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性。
  • 强度测试:核实测试对象性能行为在异常或极端条件(如资源减少或用户数过多)之下的可接受性。
  • 容量测试:核实测试用户同时使用软件程序的最大数量。
  • 性能评价:通常是和用户代表一起协作并且以多级方法执行的。
  • 性能指标

4.DevOps-4.度量指标--0.度量指标(Metrics)》中已经描述过指标体系的建立与使用过程,而针对性能来说指标几乎已经固定为几个特殊的指标。不过还是有很多性能指标可以为性能分析提供很多帮助,在度量指标中我们讨论过指标类型可以分为:

  1. Counter(计数器)

请求次数等

  1. Gauge(测量器)

瞬时内存占用情况,CPU使用情况等。

  1. Histogram(柱状图)

响应时间等。

  1. Meters(码表)

CPU Load数等。

  1. Timers(计时器)

请求执行时长等。

  • 其他

  • 测试内容

具像化测试内容,例如对于区块链交易频次测试,那肯定是对整个区块链系统中数据同步的过程进行测试。对IoT环境进行测试就要理清设备接入时使用的协议是那种,做通信的就要对于系统的整体交换速率作为系统性能表现。

  • 环境定义

测试环境与被测环境的定义确定着要优化的范围。

性能分析

性能分析是针对性能测试结果数据或着性能测试过程数据进行分析已找到性能瓶颈的方法。在性能测试完成后不可分析就代表着不可以进行优化。故结果的可分析性至关重要。现在性能分析已经有了长足的进步,有很多现成的程序可以帮助进行性能分析的工作。而且还可以可视化的展示分析结果。不过有些时候仍然需要进行人工的分析工作。性能分析的主要目标是可视化。

在借助现阶段流行的《可观测性》的实现方式之后,性能分析过程可以分为两类:APM,事后分析类。APM可以得到运行期间的运行情况,而对性能测试结果进行分析可以得到整体用户直观感受。一般情况下会结合两种方式进行。
性能分析

性能优化

针对性能分析的结果进行优化,不管是找到业务问题还是技术问题都需要在这里输出相关的解决方案。在技术上有一些通用的调优方案,例如:阿里PTS上描述的性能测试 PTS > 性能测试基础知识 > 测试分析及调优,有赞的一次假期故障引发的性能优化思考

总结

本文最主要说明的内容是性能优化的步骤以及步骤中可能的内容,还有很多细节未明确出来。例如:通用性能指标体系TPCC、SPEC、SAP SD,性能分析过程中的分析方法,性能调优过程中的验证过程等,性能调优架构级别调优方法等等。这些都会在后面的文章中进行更详细的讨论。

参考

过早优化是万恶之源——克努特优化原则 (Knuth's optimization principle)
性能测试的概念
性能优化指南:性能优化的一般性原则与方法
常用性能测试指标解读与使用价值分析
一次假期故障引发的性能优化思考
【性能系列连载一】开篇:性能测试不可不知的“干货”
Web「性能测试」知多少?
性能分析
测试分析及调优

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
15天前
|
存储 缓存 架构师
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
架构设计 在架构设计过程中,我们会根据需要做出不同的架构设计,而在设计时需要涉及一定的架构设计核心要素。
|
2月前
|
运维 负载均衡 Kubernetes
技术方案(开源方案)选型的考量和方法论
技术方案(开源方案)选型的考量和方法论
|
9月前
|
运维 监控 Kubernetes
架构设计70-质量管理02-性能优化03-规范
架构设计70-质量管理02-性能优化03-规范
74 0
架构设计70-质量管理02-性能优化03-规范
|
11月前
|
数据可视化 数据挖掘 大数据
方案_技术方案|学习笔记
快速学习方案_技术方案
89 0
方案_技术方案|学习笔记
|
11月前
|
消息中间件 运维 Prometheus
我对业务服务运维架构的一些设计思路
业务性的运维管理从几个维度,主要是IaaS层,中间件层,业务层,运行状态层几个进行的监控管理,结合人工,手工,自动化能力角度进行设计,去掉重复的手工和低阶的运维,使业务运维偏向于高阶的思考,提升整个运维的管理能力
|
JavaScript 前端开发 关系型数据库
从业务开发中学习和理解架构设计
在设计代码目录划分方案的过程中,看了一些工程结构设计的资料,读了一些关于架构设计的书,对于架构有了一些理解。本文是对这段学习和任务完成过程的思考和沉淀。希望能够解答“架构到底是什么?架构和业务之间的关系?”,“好的架构的设计出发点是什么?好的架构应该是什么样的?”这几个问题。
从业务开发中学习和理解架构设计
|
程序员
思考如何做好架构设计
在开发软件中过程中,我们时常会遇到这样的场景:在需求描述中只要求我们提供一个针对其特定需求的功能,但是作为程序员,直觉告诉我们在别的场景下可能有类似的需求,但是这个“别”的场景还没有真正出现,处在可能出现,也可能不会出现的境地,那我们应该如何应对这样的情况呢?在这篇文章中,将对如何处理这样的问题进行探讨。  在展开探讨前,我们先定义如下的两个词汇,便于我们后面的讨论: 通用:是指在设计中考虑了多个不同的使用场景,能在多个不同的场景下提供服务 特定:只考虑很特定的场景,要求在相对较多的限制条件下才能提供服务
157 0
|
SQL 缓存 运维
性能优化和体系化运维 ——唐成
性能优化和体系化运维 ——唐成
|
架构师 算法
架构设计(一)
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。
677 0
相关产品
云迁移中心
推荐文章
更多