有同学问了这样一个问题:一个新服务上线需要压测,业务类型为订单业务,数据库采用的是MySQL且分库分表,在开展性能测试时有哪些注意事项?
这是一个很典型且较为常见的性能需求,很多新手在面对这种性能需求时却经常犯错,常见的误区有直接压测MySQL、用工具直接模拟高并发、测试数据量较小甚至重复等现象。
在以往分享的性能测试相关实践案例文章中,我一直强调一个认知:性能测试是一个系统的技术工程,实施之前一定要做好需求分析,然后设计好三大模型(业务模型+流量模型+数据模型),最后才是执行压测。
如果从优先级和耗时占比来说,前期准备工作会耗费大量时间精力,反而执行阶段耗时较小且优先级要向后排。
以上述同学的问题为例,分析该性能测试需求一定要搞清楚如下几点:
1、本次性能测试的目的是什么?
是验证新服务的最大性能表现、安全容量,还是验证该新服务对应的技术架构性能和稳定性表现?
如果是验证最大性能表现和安全容量,那需要挑选出该服务的核心业务场景,并按照预估的线上流量和业务量制定流量模型,准备测试数据,然后再执行压测。
如果仅是验证该新服务技术架构(特指MySQL分库分表)的性能和稳定性表现,则创建SQL语句直接压测数据库即可。
目的不同,则具体的实施方案和准备事项不同。
2、如何设计该性能需求的三大模型?
设计出正确合理的性能测试三大模型,是性能测试能否正确开展的核心工作。
业务模型:订单业务的核心一般有创建订单、订单支付、订单列表、订单详情,这些都是正向业务流程,按照经验来说会占到订单服务大概90%以上的流量。压测时一般仅需要验证这几个核心场景的性能表现即可。
流量模型:找到核心业务场景后,按照这几个业务场景的预估请求量占比(比如预计日均1W单,其中创建订单5K、订单支付3K、订单列表和订单详情各1K)来制定流量模型。
流量模型的制定并不是拍脑袋制定的,一方面需要和业务方多沟通,另一方面还要考虑到技术实现的内部调用关系和调用次数,以及强弱依赖。如果有线上监控或线上已有服务(老订单服务)数据作为参考,则更好。
在制定流量模型时,还需要注意一点:流量模型的制定可以参考业务转化漏斗。
数据模型:有了业务模型和流量模型,数据模型的制定则比较简单。比如创建订单峰值QPS毛估200,单次压测执行10分钟,则创建订单接口所需的测试数据,最少需200*10*60=120000条数据。
以此类推,准备好核心业务场景对应的API中,请求入参需要参数化的数据,然后执行压测即可。
3、独立的性能测试环境是性能测试能否正确实施的基础。
很多同学觉得性能测试不就是找个环境部署好服务,然后直接用工具模拟高并发嘛,很简单,其实不然。
独立的性能测试环境很重要,主要体现在如下几个方面:
至于是否有那个时间和成本预算搭建独立性能测试环境,因地制宜,是具体情况而定。
在成本和需求都满足的情况下,搭建独立性能测试环境可以参考如下几点建议:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。