高楼的性能工程实战课笔记-005-性能方案

传统测试方案:
    常规项目信息:比如说测试背景、测试范围、测试准则、测试环境、实施准备、组织结构、项目风险、里程碑。
    性能实施信息:比如说测试模型、测试策略、监控策略。
    项目输出:比如说测试脚本、测试用例/测试场景、监控采集数据,测试报告、调优报告。
工程级完整测试方案
    背景
        项目背景
        性能目标
    测试范围
        需要测试的特性
        不需要测试的特性
    准则
        启动准则
        结束准则
        暂停/再启动准则
    业务横型和性能指标
        业务模型/测试模型
        业务指标/性能指标
    系统架构图
        系统技术栈
        系统逻辑架构图
        系统部署架构图
    性能实施前提条件    
        硬件环境
        工具准备
            测试工具
            监控工具
        数据准备
            基础数据
    性能设计
        场景执行策略
            场景递增策略
            业务场景
                基准场景
                容量场景
                稳定性场景
                异常场景
        监控设计:
            全局监控
            定向监控
    项目组织架构
    成果输出:
        过程性输出
        结果输出
            性能项目测试报告
            性能调优报告
    项目风险分析
    
方案细化:    
    性能目标【在每一个性能项目中,性能目标都会影响项目的整个过程。因此,对目标的把握将决定一个性能项目的走向。】
        1. 根据经典的电商下单流程,测试当前系统的单接口最大容量。
        2. 根据业务比例设计容量场景,充分利用当前资源,找到当前系统的性能瓶颈,并优化,以达到系统的最佳运行状态。
        3. 根据稳定性场景,判断当前系统可支持的系统最大累加容量。
        4. 根据异常场景,判断当前系统中的异常对性能产生的影响。
        
    测试范围
        需要测试的特性
            列举需要测试的场景及涉及到的接口
            
        不需要测试的特性
        
    准则
        启动准则
            1. 确定系统逻辑架构和部署架构和生产一致。
            2. 确定基础数据和生产一致或按模型缩放。
            3. 确定业务模型可以模拟生产真实业务。
            4. 环境准备完毕,包括:
                4.1. 功能验证通过。
                4.2. 各组件基础参数梳理并配置正确。
                4.3. 压力机到位,并部署完毕。
                4.4. 网络配置正确,连接通畅,可以满足压力测试需求。
            5. 测试计划、方案评审完毕。
            6. 架构组、运维组、开发组、测试组及相关专家人员到位。
        结束准则
            1. 达到项目要求的性能需求指标。
            2. 关键性能瓶颈已解决。
            3. 完成性能测试报告和性能调优报告。
        暂停 / 再启动准则
            1. 暂停准则
                <1>. 系统环境变化:举例:系统主机硬件损坏、网络传输时间超长、压力发生器出现损坏、系统主机因别的原因需升级暂停等。
                <2>. 测试环境受到干扰,比如服务器被临时征用,或服务器的其他使用会对测试结果造成干扰。
                <3>. 需要调整测试环境资源,如操作系统、数据库参数等。
                <4>. 该测试机型无法达到规划指标要求。
                <5>. 出现测试风险中列出的问题。
            2. 再启动准则
                <1>. 测试中发现问题得以解决。
                <2>. 测试环境恢复正常。
                <3>. 测试风险中出现的问题已解决。
                <4>. 环境调整完毕。
    业务横型和性能指标
        业务模型/测试模型
            涉及接口及所占比例【从生产环境中取得的业务比例。】
        业务指标/性能指标
        
    系统架构图
        系统技术栈
            整个架构中用了哪些技术组件。
            技术组件中有哪些常见的性能瓶颈点,有哪些性能参数
        系统逻辑架构图
            逻辑架构图是为了后续性能分析的时候,脑子里能有一个业务路径。
            我们在做性能分析时,要做响应时间的拆分,而只有了解了逻辑架构图才可以知道从哪里拆到哪里。
        系统部署架构图
            为了让我们知道有多少节点、多少机器。
            在执行容量场景时,脑子里要有一个概念,就是这样的部署架构最大应该可以支持多少的容量上限。
    性能实施前提条件    
        硬件环境
            作为性能从业人员,我们必须要了解硬件配置和整体业务容量之间的关系。
        工具准备
            测试工具
            监控工具
                在全局监控中,我们要尽量避免使用定向的监控手段
                参考线上运维的监控手段,不要自己臆想,随意搭建监控工具。
        数据准备
            基础数据
                1. 满足生产环境的真实数据分布,最合理的方式是脱敏生产数据。
                2. 参数化数据一定要使用基础数据来覆盖真实用户
        性能设计
            场景执行策略:============要模拟生产场景,连续递增一定要做到的,不容迟疑。
                性能的场景必须满足两个条件:
                    连续
                    递增:递增过程中,被测系统的资源要动态分配。系统可能在这个时候抖动
                场景递增策略
                业务场景:执行顺序先后为:基准场景、容量场景、稳定性场景、异常场景。
                    基准场景:基准场景必须是容量场景的前奏。
                        在基准场景中,通过递增连续的场景做到最大 TPS。在基准场景中,我们要把单接口或单业务压到最大 TPS,然后来分析单接口或单业务的瓶颈点在哪里。
                        如果单接口或单业务的最大 TPS超过目标TPS,并且响应时间也在业务可接受的范围之内,那就不用调优。如果没有超过,那必须要做调优。
                        
                        根据 RESAR 性能工程理论,性能执行的第一阶段目标就是把资源用光,第二阶段的目标是将系统优化到满足业务容量。
                    容量场景
                        在容量场景中,秉承“连续、递增”的执行思路,最重要的是,要实现业务模型,来真实模拟线上的业务场景。
                        JMeter可以通过调整 线程数+Throughput Controller 来控制业务比例
                        
                        【注意】:
                            1. 容量场景的最大 TPS 是指最大的稳定 TPS。在已经抖动了,已经不稳定了的压测中,我们再去找它的最大 TPS 没有意义
                            2. 以后尽量不要再用“性能拐点”这个词来尝试描述性能的曲线,除非你是真的看到了拐点。
                    稳定性场景
                        在稳定性场景中,我们只有两个关键点:
                            1. 第一个关键点:稳定性场景的时长【怎么计算?】。在性能的稳定性场景中,我们要完全覆盖业务容量。
                                在运维周期内,有 1 亿笔业务容量。根据上面容量场景中的测试结果,假设最大稳定 TPS 是 500,那稳定性场景的执行时长就是:稳定性时长=100000000÷500÷3600÷24≈2.3(天)
                            2. 第二个关键点:用多大的 TPS 来执行。
                                在执行稳定性场景时,完全可以用最大的稳定 TPS 来运行【不比非要使用传说中的80%】,只要覆盖了运维周期之内的业务容量即可。
                    异常场景
                        对于常规的异常场景,我们经常做的就是:
                        宕主机;
                        宕网卡;
                        宕应用
                        宕容器
                        
                        也可以用一些所谓的“混沌工程“的工具来实现对容器的随机删除、网络丢包、模拟 CPU 高等操作
            监控设计:
                全局监控
                    Prometheus/Grafana/Spring Boot Admin/SkyWalking/Weave Scope/ELK/EFK 就可以实现具有全局视角的第一层监控。
                定向监控
                    有问题的时候才会去使用定向监控
                        监控Java应用
                            jstack
                            jmap
                            jvisualvm
                            Arthas
                        分析MysQL
                            mysglreport pt-digest-query
                        跟踪操作系统级别的调用。
                            perf
                            strace
    项目组织架构
        性能项目经理
            性能脚本工程师:负责编写性能测试脚本和场景执行
            性能分析工程师:负责分析性能场景执行过程中遇到的性能瓶颈
            架构师:负责支持性能分析
            开发工程:师负责支持性能分析
            运维工程师:负责支持性能分析
            业务方:确定性能项目的业务级需求
            老板:当资源不足时,请你一定要让老板知道,同时降低老板的预期,要不然在后续的沟通中会非常费劲。
                理智的老板负责协调支持
                不理智的老板负责指手画脚地捣乱
    成果输出:
        过程性输出:建议在性能项目中,尽量多做一些归档整理的工作,以备在后面的项目中查阅,并实现自己的技术积累
            脚本
            场景执行结果
            监控结果
            问题记录
        结果输出
            性能项目测试报告
                我们要给出“当前系统可支持 XXX 并发用户数,XXX 在线用户数”这样的结论。
                一定不要用“可能”、“或许”、“理应”这种模棱两可的词。
                性能结果报告中要有对运维工作的建议,也就是要给出关键性能参数的配置建议,比如线程池、队列、超时等。
                性能结果报告中要有对后续性能工作的建议。
            性能调优报告
                调优报告才是整个性能项目的精华,调优报告中一定要记录下每一个性能问题的问题现象、分析过程、解决方案和解决效果。
    项目风险分析    
        
        
        
技术组件:
        技术                        说明                            官网
        Kubernetes(k8s)            容器云                    https://kubernetes.io
        Helm                    Kubernetes包管理器        https://helm.sh
        Docker                    应用容器引擎                https://www.docker.co
        Weave Scape                Kubernetes可视化监控工具    https://www.weave.works
        Spring Cloud            微服务框架                    https://spring.io/projects/spring-cloud
        Spring Cloud Allbaba    微服务框架                    https://github.com/alibaba/spring-cloud-alibaba
        Spring Boot                容器+ MVC框架                https://spring.io/projects/spring-boot
        knife4j                 文档生产工具                https://github.com/xiaoymin/swagger-bootstrap-ui
        Elasticsearch            搜索引擎                    https://github.com/elastic/elasticsearch【bad】
        RabbitMQ                消息队列                    https://www.rabbitmq.com
        Redis                    分布式缓存                    https://redis.io
        MongoDB                    NoSQL数据库                https://wwww.mongodb.com
        Logstash                应用日志收集                https://github.com/logstash/logstash-logback-encode
        Jenkins                    DevOps调度工具            https://github.com/jenkinsci/ienkins【bad】
        Promethues                资源监控系统                https://prometheus.io
        Grafana                    监控可视化看板                https://grafana.com
        Harbor                    Docker镜像仓库            https://github.com/goharbor/harbor-helm【bad】
        SkyWalking                分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案    http://skywalking.apache.org
        Kibana                    日志可视化看板                https://www.elastic.co/cn/downloads/kibana【bad】
        Fluentd                    容器日志收集                https://github.com/kubernetes/kubernetes/tree/master/cluster/addonsfluentd-elasticsearch
        GitLab                    代码仓库                    https://about.gitlab.com
        Nexus-3 oss                制品仓库                    https://wwww.sonatype.com
        JMeter                    压测引擎                    https://imeter.apache.org
        Kuboard                 微服务管理工具                https://github.com/eip-work/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值