03-揭秘大厂性能方案的奥秘!(上)

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 03-揭秘大厂性能方案的奥秘!

性能方案在性能项目中是重要文档之一,它指导整个项目的执行过程,也约束项目边界,定义相关人员职能。但如今变得“微不足道”。


很多常见的性能项目中,性能方案就是个文档,且是个静态文档。里面写的东西是啥,项目后续会不会按这内容做,没人关心。它就成了形式,只有评审方案时才拿出看看。甚至一些第三方测试项目中,有些甲方连方案内容都不看,直接问有没有?有,就过去了。一个必需的交付物无人关心。


性能方案是个重量级文档。性能项目中被叫成“性能测试方案”。在我这,我把“测试”二字拿掉,因为这取决于我性能工程理念,我希望把整个项目的过程都描述在方案。


0 我的性能方案 V.S 那些常见性能方案

经常看到有这样目录的性能测试方案:

这样的目录大纲组成

  • 常规项目信息:如测试背景、测试范围、测试准则、测试环境、实施准备、组织结构、项目风险、里程碑。
  • 性能实施信息:如测试模型、测试策略、监控策略。
  • 项目输出:如测试脚本、测试用例/测试场景、监控采集数据,测试报告、调优报告。

从性能测试方案的角度来说,这些内容似乎够。但若抛弃“测试”视角,从一个完整的性能项目的角度来看,这些内容还不够。

以前经常有人问我要一个性能项目方案模板,我一直不理解,就这么一个目录,为什么还非得要?自己一个字一个字也照样写得出来吧。后来我慢慢理解,他们要的其实不是大纲目录,而是一个完整的性能方案内容。


项目实施的性能方案基本不可能直接发出来,即便脱敏,一些内容也可以看出是属于某些企业。所以网上看不到完整的性能方案。尽管网上方案不完整,在性能市场上,还是看到有太多性能方案抄来抄去,总体结构大同小异。这也就导致性能项目中,大量方案都只流于形式。


因为我们需要基于一个完整的项目来编写,所以,我把这个项目整体的方案写在这里。你将看到,我认为的真正完整并且有意义的性能方案是啥样。


由于性能方案的内容比较多,并且相对琐碎,整理了一张性能方案的目录表格,你可以对应这张表格,学习具体内容。

来看真实的性能项目实施方案:

1 背景

1.1 项目背景

由于各企业的商业软件有限制,只能选择一个开源项目,并且这个项目最好可以覆盖常见的技术栈,以便能给你提供更多可借鉴内容。因此搭建了一套电商项目:

  • 这个项目是较为完整的
  • 当前电商的系统比较典型,并且这个项目完全开源,便于改造

不过,也因为这是一个开源的项目,功能和性能都不知道会有什么样的问题,我们只有在性能实施的过程中一步步去发掘,所以这是一个非常符合我们当前目标的项目。

1.2 性能目标

  1. 根据经典的电商下单流程,测试当前系统的单接口最大容量。
  2. 根据业务比例设计容量场景,充分利用当前资源,找到当前系统的性能瓶颈,并优化,以达到系统的最佳运行状态。
  3. 根据稳定性场景,判断当前系统可支持的系统最大累加容量。
  4. 根据异常场景,判断当前系统中的异常对性能产生的影响。

在每一个性能项目中,性能目标都会影响项目的整个过程。因此,对目标的把握将决定一个性能项目的走向。

某项目,客户要求做到支持1000万人在线,项目不算小,开发团队有300人左右。到那一看只有两个性能测试人员,其中一个还刚毕业。于是,我就过去找他们科技部老大,说这项目我做不了。因为根据这个目标和这样的人员配置,这坑不是我能填上的,得赶紧认怂。后来,那个科技部的老大问,需要什么样资源才能做下去?于是我提几个必需条件,直到这些条件都满足,才接这项目。


性能目标在上下级眼中根本不一样,而我这样的处理,是希望把性能目标在上下级的脑袋中变得一致。这很重要。


2 测试范围

2.1 需要测试的特性

电商主流程:

2.2 不需要测试的特性

批量业务。

3 准则

3.1 启动准则

  1. 确定系统逻辑架构和部署架构和生产一致。
  2. 确定基础数据和生产一致或按模型缩放。
  3. 确定业务模型可以模拟生产真实业务。
  4. 环境准备完毕,包括:

4.1. 功能验证通过。
4.2. 各组件基础参数梳理并配置正确。
4.3. 压力机到位,并部署完毕。
4.4. 网络配置正确,连接通畅,可以满足压力测试需求。

  1. 测试计划、方案评审完毕。
  2. 架构组、运维组、开发组、测试组及相关专家人员到位。

3.2 结束准则

  1. 达到项目要求的性能需求指标。
  2. 关键性能瓶颈已解决。
  3. 完成性能测试报告和性能调优报告。

3.3 暂停/再启动准则

1. 暂停准则
  • 系统环境变化:举例:系统主机硬件损坏、网络传输时间超长、压力发生器出现损坏、系统主机因别的原因需升级暂停等。
  • 测试环境受到干扰,比如服务器被临时征用,或服务器的其他使用会对测试结果造成干扰。
  • 需要调整测试环境资源,如操作系统、数据库参数等。
  • 该测试机型无法达到规划指标要求。
  • 出现测试风险中列出的问题。

2. 再启动准则

  • 测试中发现问题得以解决。
  • 测试环境恢复正常。
  • 测试风险中出现的问题已解决。
  • 环境调整完毕。

4 业务模型和性能指标

4.1 业务模型/测试模型

这个模型是直接从生产环境中取得的业务比例,通过统计日志就能做到。

有些企业的生产数据都在运维手里,性能团队怎么也得不到,因为没有权限,就连做业务模型的数据都没有。那性能项目可直接终止,因为做了也没多大意义,最多也就是找那些瞎吹牛的架构师和乱写代码的开发人员,犯的一些错而已。

业务模型一般还可以由项目组提供生产上的业务报表,根据业务报表查看业务频繁的交易进行按比例,设计测试模型

业务指标/性能指标

在不清楚项目目标TPS的情况下,我暂定目标TPS为1000。根据经验来说,在这样的硬件环境下,定为1000并不算高,除非是没有合理的软件架构。

5 系统架构图

架构图的重要性:方便测试人员根据架构判断是否存在隐患及问题排除

5.1 系统技术栈

系统技术栈是让我们知道整个架构中用了哪些技术组件。而这些技术组件中有哪些常见的性能瓶颈点,有哪些性能参数,我们都可以在查看技术栈时得到一些相关信息。而在后续的工作中,我们也要整理出相应的关键性能参数配置。


下面这张表格,就是我们在后续案例分析中,会用到的技术栈。我在搭建这个系统时,考虑的是尽量覆盖当前技术市场中的主流技术组件。


5.2 系统逻辑架构图

为后续性能分析的时候,脑子里能有一个业务路径。做性能分析时,要做响应时间的拆分,只有了解逻辑架构图才知道从哪拆到哪。

5.3 系统部署架构图

画部署架构图是为让我们知道有多少节点、多少机器。在执行容量场景时,要有概念,这样的部署架构最大应该可以支持多少的容量上限。

对一些无理的性能需求,你看了部署架构后,就可拒绝。比如说前段时间有个人跟我说,他们有一个CRM系统,在做性能的时候,说要达到1万的并发用户。而实际上,那个系统就算是上线了,总用户数可能都不到1万。


系统部署架构图是不是就是系统各个层用了那些东西,这些是不是都要知道?是的。就是要知道各个层面用了哪些技术组件。同时还要知道业务路径是从哪里到哪里。

根据系统部署架构图,咋就能知道支持多少容量上限?有啥评判方法吗?这个问题,动手实践即知道。对你测试的系统,验证单节点的容量上限是多少,就能大概判断整个架构能支持多少,当然这过程中要有模型的创建过程。如在一个2C 4G机器,我直接用一个post接口做一个insert动作,在我的经验中,大概就是在500-600TPS左右。



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
6月前
|
缓存 NoSQL 应用服务中间件
性能基础之大型网站架构演化(整理篇)
【2月更文挑战第14天】性能基础之大型网站架构演化(整理篇)
96 1
性能基础之大型网站架构演化(整理篇)
|
3月前
|
缓存 前端开发 JavaScript
优化前端性能:从理论到实践的全面指南
前端性能优化是提升用户体验的关键环节,但这一过程常被技术细节和优化策略所困扰。本文将系统地探讨前端性能优化的理论基础及实践技巧,包括关键性能指标、有效的优化策略、以及常见工具的应用。我们将从最基本的优化方法入手,逐步深入到高级技巧,为开发者提供一套全面的性能提升方案,以实现更快的加载时间、更流畅的用户交互体验。
|
11天前
|
缓存 算法 数据库
性能优化实战——从理论到实践
性能优化实战——从理论到实践
23 1
|
2月前
|
存储 人工智能 算法
探究现代操作系统的架构与性能优化
本文将深入探讨现代操作系统的核心架构,并重点分析其性能优化的关键策略。我们将从宏观和微观两个角度出发,解释操作系统的基本组成部分及其相互作用,并通过具体实例展示如何通过各种技术手段提升系统性能。无论是软件开发者还是计算机专业的学生,都能从中受益,获得对操作系统更深层次的理解。
|
6月前
|
存储 并行计算 算法
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
86 0
|
3月前
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
|
6月前
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
628 0
|
4月前
|
监控 网络协议 Linux
Linux系统管理与优化技巧:提升性能与效率的深度探索
【7月更文挑战第24天】Linux系统管理与优化是一个持续的过程,需要管理员和开发者不断地学习和实践。通过合理的系统监控、内存管理、文件系统优化、进程与任务管理、网络优化以及软件与包管理,可以显著提升Linux系统的性能和效率,确保业务的稳定运行。希望本文的技巧能为广大Linux用户带来帮助,共同推动Linux生态的繁荣发展。
|
6月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
113 0
|
6月前
|
存储 缓存 安全
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
337 0