RESAR 性能工程,
RESAR 性能工程是对性能项目过程中的各个具体的动作做更详细的描述,使之可以成为可以落地的具体实践。
【性能测试】
性能测试是针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。
性能项目是有宏观目标的:
1. 找到系统中的性能瓶颈并优化掉;
2. 满足业务容量的要求,保障线上系统可以正常运行。
【性能工程】
性能工程是指,通过分析业务逻辑和技术架构,创建性能模型,制定性能方案,准备应用环境,设计并实施性能部署监控,实现符合真实业务逻辑的压力,通过监控手段获取各组件的性能计数器,分析计数器采集出的数据,查找出性能瓶颈的根本原因并优化,最后通过环比生产环境的性能数据修正场景。
我们要做好性能,就不能只局限在“测试”上,不能将它当成是一个项目中的某一环,我们需要用“工程”的视角来看待“性能”这件事儿。
【环比】把线上的性能数据拿回来,和性能测试过程中的数据做环比,看之前做的是否满足真实的业务场景。而环比的内容就是我们的性能模型、性能指标等。
性能工程一定要由一个职高言重的人来推动。具体的工作内容,由性能实施的人来承接就可以了。
具体有以下几方面内容:
1. 业务需求
<1>. 分析可能出现性能问题的业务关键点,像业务路径、业务热点数据、秒杀业务、实时峰值业务、日结批量等。
<2>. 创建出业务模型。
对于新系统来说,就算是拍脑袋也要给出业务模型;
如果是已有系统的业务模型,可以通过统计生产业务量的方式来得到。
2. 立项
<1>. 需要具备性能架构思维的人介入到立项环节中,在技术选型、架构设计层面给予专业的意见,来规避以后可能出现的性能问题。
具体来讲,这位拥有性能架构思维的人需要:
做高可用、可伸缩可扩展、
负载均衡 SLB、
TCP 层优化、
DNS 优化、
CDN 优化等与性能相关并且是架构该干的事情。
再细化一下,那就是各组件的
线程池配置、
连接池配置、
超时配置、
队列配置、
压缩配置等细节。
<2>. 做容量评估、容量模型建立、容量水位模拟等模型建立。
3. 研发
【白盒测试】列出每一个方法在没有任何压力的情况下,它们的执行时间以及对象消耗的内存,以便后续做容量场景时做相应的计算。
我们测试人员需要具备一定的技能。
4. 测试
按照
基准场景(单接口、单系统容量场景)、
容量场景(峰值、日结、秒杀、日常等场景)、
稳定性场景
异常场景
的执行顺序,把前面所有和性能相关的工作都验证一遍。
实施 RESAR 性能工程的要点是:
1. 通过分析业务逻辑和技术架构,创建性能模型,制定性能方案,准备应用环境,设计并实施性能部署监控;
2. 实现符合真实业务逻辑的压力;
3. 构建性能分析决策树,通过监控手段获取各组件的性能计数器;
4. 分析计数器的数据查找出性能瓶颈的根本原因并优化;
5. 通过环比生产环境的性能数据修正场景。
对比全链路压测和devops
【全链路压测】
做线上全链路的目的,是为了通过使用生产环境中的架构、软硬件环境、数据、网络结构等等,来达到模拟真实业务压力场景的目标。
【devops】
DevOps 偏技术管理的角度,“左移”,“右移”,就是主动抢别人的活干
【沟通】
在性能工作中不管涉及到了什么职位或是什么背景的人,作为性能团队的人,在和别的团队沟通时:
一定要把问题提得精确具体,把为什么要这样做,这样做的成本、好处,以及不这样做的坏处,都说明白就可以了。
为性能结果负责需要三方面支持
技术细节
1. 我们的技术细节需要做到和线上一致,比如说软硬件环境、网络架构、基础数据、测试场景、监控部署等等
2. 在一个性能团队中,自己的基础技能一定要能足够支撑起项目【=============努力飞升==========】。
工作范围
要对整个系统性能负起责任,性能测试人员的工作范围就需要扩大
1. 要向前扩大到性能需求。一个性能需求,是由业务、架构、研发、测试、运维以及不懂技术的领导一起来定的
2. 再向后扩大到运维过程。要把运维过程中的数据拿回来做环比,然后迭代我们的性能实施过程。
工作权限
1. 技术权限:主机登录 root、数据库 DBA 等权限。
2. 指挥权限。开发运维的配合,我们在需要什么人做什么事情的时候,一定要能叫得动