性能测试从零开始实施指南——容量评估篇

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
性能测试 PTS,5000VUM额度
简介: 移动端:这里的移动端包括手机、平板等各类移动设备(目前移动端的流量也是占比最大的一个流量来源渠道);

大概去年这时候,写过一篇文章:浅谈容量测试与容量规划:


https://www.cnblogs.com/imyalost/p/9630846.html


里面聊了一些我个人对于容量测试和容量规划的一些了解以及想法。由于今年我司要搞双十一大促,因此全链路压测中很重要的一环——容量测试和容量规划被列入了待办事项。


与之相对的,想正确的进行容量测试,对线上容量规划提供重要的参考依据,容量评估,就是我们在准备阶段需要做好的事情。如何做呢?


这篇文章简述下我在准备阶段,是如何开展容量评估工作以及遇到的一些问题,以及解决方案。


容量评估九步走——流程图


640.png

 

一、划分流量来源


容量评估阶段首先要做的是划分流量来源,这点需根据具体业务特点来划分。一般为如下三种来源:


1、PC端:以电商平台为例(淘宝、京东、拼多多......),指的是从PC端发起的用户请求流量;


2、移动端:这里的移动端包括手机、平板等各类移动设备(目前移动端的流量也是占比最大的一个流量来源渠道);


3、小程序:近几年随着小程序兴起,来源于小程序以及H5的流量也是不可忽视的一部分流量渠道;


敲黑板:如果为了更精确细化的进行流量划分,还可以根据流量来源的区域(国内/国外、包邮区/偏远地区)来划分,这样做的目的是可以根据地区来进行机房分配以及DNS网络配置!


问题:如何监控不同区域的流量?专业解决方案提供商(监控宝)、根据请求地址相关数据进行日志解析,生成监控热点图(grafana监控大盘);

 

二、确认统计类型


这里的统计类型是从系统架构的角度来划分的,根据不同的系统架构、技术组件来确认流量落地的比例,主要分为如下四种类型:


1、DB容量:具体来说,比如MySQL集群中,不同业务库最近一小时的峰值QPS(需要结合数据采集的场景以及是否进行了分库分表、主从分离的配置);


2、服务容量:如果是一体式服务,则无须考虑业务划分;如果是微服务类型或SOA类型,则需要根据业务拆分的不同服务,进行容量统计(需考虑到服务依赖的情况);


敲黑板:服务容量的评估(指标还是QPS),还需要统计单机服务实例的配置、目前生产环境的机器数量!


3、消息容量:消息主要指的是消息队列,比如MQ、kafka(同样需要根据业务属性来划分)。


敲黑板:消息容量的统计,主要统计这几类数值:集群类型、Topic、ConsumeGroup、消息总量、与日常倍数、是否堆积、峰值QPS


4、缓存容量:这里的缓存指的是Redis(CDN我目前还未接触到,这里不做概述),同样,需要按照不同的业务进行垂直划分。


敲黑板:容量评估时,需考虑到Redis的实例配置、模式(哨兵/集群)、峰值QPS、存储容量、机器数量、可用区(容灾)


问题:涉及到热Key、大Key问题,建议提前进行大Key治理,热Key散列分布(记得检查会话保持策略)!

 

三、接入监控组件


1、Cat


①、简介:CAT是基于Java开发的实时监控平台,主要包括移动端监控,应用侧监控,核心网络层监控,系统层监控等。提供实时监控报警,应用性能分析诊断的工具。


②、功能特性:可参考这里:


大众点评CAT开源监控系统剖析:https://www.cnblogs.com/yeahwell/p/cat.html


2、Jeager


①、简介:open source, end-to-end distributed tracing.


②、架构图


640.png


3、Sentinel


①、简介:阿里中间件团队开源,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。


②、架构图


640.jpg


③、侧重点


多样化流量控制;


熔断降级;


系统保护(LOAD,RT,线程数,入口QPS,CPU使用率);


实时监控和控制台配置;


4、Prometheus


①、简介:开源的系统监控和报警框架,灵感源自 Google 的 Borgmon 监控系统。2012 年,SoundCloud 的 Google 前员工创造了 Prometheus,并作为社区开源项目进行开发。


2015 年,该项目正式发布。2016 年,Prometheus 加入云原生计算基金会(Cloud Native Computing Foundation),成为受欢迎度仅次于 Kubernetes 的项目。


②、特性


多维的数据模型(基于时间序列的 Key/Value 键值对);


灵活的查询和聚合语言 PromQL;


提供本地存储和分布式存储;


通过基于 HTTP 的 Pull 模型采集时间序列数据;


可利用 Pushgateway(Prometheus 的可选中间件)实现 Push 模式;


可通过动态服务发现或静态配置发现目标机器;


支持多种图表和数据大盘;

 

四、选取采集场景


数据采集场景的选取,与核心链路梳理有强依赖关系,建议按照如下三种方式进行。


1、日常峰值


选取生产环境日常的峰值流量进行统计,这里的峰值指的是区间峰值,区间一般可以选择30min;


2、核心链路


关于核心链路梳理,可参考上一篇博客性能测试从零开始实施指南——场景模型篇。示意图如下:


640.png


3、全量推送


对于电商业务而言,经常会有一些消息或者活动推送的玩法,建议选择在活动推送期间的峰值流量来作为数据采集场景的流量参考;

敲黑板:全量推送后会有一小段的高峰流量涌入,会对整个系统服务产生一定的影响!

 

五、汇总流量数据


流量统计表格Mode如下,仅供参考:


1、服务容量


640.png


2、消息容量


640.png


3、缓存容量


640.png


4、DB容量


640.png

 

六、获取投放引流


运营投放引流的渠道、力度以及转化率是很重要的一个参考指标,可以让我们对大促时期的预期流量有更准确的预估。主要从如下三点来考虑:


1、时段


一般来说,电商这种大促,都是从月初持续到活动当天,不断蓄水炒氛围,活动当天流量达到峰值,然后有2-3天的返场,总体来说时间大概为半个月左右。


获取到整个活动期间每个时间段有哪些活动,目的是确定峰值流量冲击的时间段,重点关注监控;


2、类型


主要是上述的时间段内,有哪些运营活动,比如:秒杀(超卖场景)、抢购(热点key的问题)、签到、抽奖、分享等;


3、量级


量级主要分为全量推送、特定用户推送、推送触达率、返场转化率等指标,这样方便我们更好的评估实时的流量峰值;


问题:为什么要获取运营投放和引流的数据呢?——为了更精准的评估峰值流量,针对性的部署演练专项预案!


七、确定验收水位


验收水位的作用,主要从以下两方面考虑:


1、监控告警阈值


确定运维保障的线上监控告警阈值,针对流量冲击,进行针对性的自动扩容;


2、资源可用缓冲


服务的处理能力是有限的,而且为了保障服务的稳定可用性,不能让服务器持续处于高负载的状态,因此要提前预留一定的资源可用比率,作为缓冲区


达到或超过运维的告警监控阈值,则自动扩容或者触发限流策略。因此最终的性能验收水位,要结合上述两点来综合考虑。


如果能对流量做到精准控制运维的自动化程度比较高的话,可以以单机的50%资源使用率作为扩容依据(淘宝貌似就是这个值)。


如果没有太精细化的控制,运维自动化程度不太高,建议以40%来作为验收水位。

 

八、执行容量测试


执行容量测试,应该是执行阶段要做的事情,由于容量测试测定的单机水位对容量评估和容量规划是承上启下的连接点,因此这里顺带提及一下。


容量测试的目的,就是获取单机容量(什么状态什么阈值下的容量,和上述第七点结合)!

 

九、线上容量规划


前面做了这么多准备工作,最终的目的是对线上容量规划有准确的参考和实施依据。容量规划常规的计算公式如下:


A服务单机容量在50%水位时,TPS=200,设定为T;线上流量转化预估TPS为3000,设定为S;为保障服务高可用,预留30%机器资源做扩容buffer,设定为B;


那么A服务最终线上需要部署的机器数量的计算公式为:Count(A)= (1+30%)*(S/T)= 19.5台机器;取整,那么服务A线上容量规划时,需要部署20台机器。

 

最后,别忘了在线上针对性的进行高可用验证!!!

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
6月前
|
设计模式 安全 测试技术
【软件设计师备考 专题 】系统实施:程序设计和系统测试
【软件设计师备考 专题 】系统实施:程序设计和系统测试
114 0
|
6月前
|
敏捷开发 监控 测试技术
深入探索自动化测试框架的设计与实施
【5月更文挑战第23天】 在快速迭代的软件开发周期中,自动化测试已成为提升效率、确保质量的关键手段。本文将深入分析自动化测试框架的设计原则和实施策略,通过具体案例探讨如何构建一个既灵活又稳定的测试框架来支持持续集成和持续部署(CI/CD)的实践。文中不仅涉及框架选择、架构设计,还详细讨论了脚本开发、维护以及性能优化等方面的挑战与解决方案,旨在为读者提供一套系统化的自动化测试实施指南。
|
4月前
|
测试技术
软件测试自动化策略与实施:提升质量与效率的关键
【7月更文挑战第25天】软件测试自动化是提高软件质量和效率的重要手段。通过明确自动化测试目标、选择合适的测试工具、制定详细的测试计划、建立稳定的测试框架以及持续优化与迭代,企业可以构建高效、可靠的自动化测试体系。在实施过程中,注重与项目团队的沟通与协作,确保自动化测试与项目开发的紧密结合,共同推动产品质量的不断提升。
|
4月前
|
Devops jenkins 测试技术
如何在Visual Basic项目中实施单元测试以确保代码健壮性
【7月更文挑战第2天】本文探讨了如何在Visual Basic项目中实施单元测试以确保代码健壮性。单元测试基础包括验证代码单元的功能,促进重构和提高代码质量。MSTest、NUnit和xUnit是VB.NET的单元测试工具。遵循TDD原则,保持测试独立,关注单一功能,并确保快速执行。示例展示了如何为`Calculator`类的加法方法编写MSTest。持续集成与自动化测试工具如Jenkins和Azure DevOps辅助测试运行和代码质量检查。单元测试是提升软件质量和开发效率的关键实践,反映了良好的开发文化。
52 2
|
6月前
|
敏捷开发 监控 Devops
深入理解与实施软件测试中的持续集成策略
【5月更文挑战第29天】 在快速迭代的软件开发过程中,持续集成(CI)策略是确保产品质量和加速市场交付的关键实践。本文将探讨持续集成在软件测试中的应用,分析其对提高测试效率、降低缺陷率以及优化资源分配的影响,并讨论如何在现有的测试框架中有效地实施CI策略。通过案例分析和最佳实践分享,旨在为读者提供一套系统的方法论,以便更好地融入现代敏捷开发流程,实现软件测试工作的自动化和高效化。
|
6月前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
6月前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
6月前
|
敏捷开发 监控 数据管理
深入理解自动化测试:框架选择与实施策略
在软件开发的快速迭代周期中,自动化测试成为确保产品质量和加快交付速度的关键。本文将探讨自动化测试框架的选择标准以及如何有效实施自动化测试策略。文中不仅涉及框架的技术细节,还包括了构建强大自动化测试体系的实践建议。通过案例分析和最佳实践,为软件测试专业人员提供深入理解,并指导他们如何在不断变化的技术环境中做出明智的决策。
|
测试技术 UED
如何实施测试用例评审维护与更新?附模板
如何实施测试用例评审维护与更新?附模板
167 0
|
Java 测试技术 数据安全/隐私保护
软件测试小白如何实施单元测试?
软件测试小白如何实施单元测试?
111 0