高可用之全链路压测

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 【2月更文挑战第30天】全链路压测是提升系统可用性的关键方法,它模拟真实流量和业务场景在生产环境中测试,确保性能、容量和稳定性。

提高一个系统的可用性的最有效方式就是通过测试进行验证。软件系统测试的方案有很多种,功能测试还是非功能测试,在什么环境测试,在软件生命周期的什么阶段测试,这些都会决定我们采用不同的测试方案。


最佳的验证方法就是让事件提前发生,即让真实的流量来访问生产环境,实现全方位的真实业务场景模拟,确保各个环节的性能、容量和稳定性均做到万无一失。这是全链路压测产生的背景。

全链路压测是指全业务覆盖、全链路覆盖的系统压测方式,要真正做到全业务全链路,就必须在线上生产环境实施压测,必须用线上的真实数据、线上的真实流量请求、同等的用户规模、同等的业务场景,来对完整的应用系统实施从网络、应用、中间件、数据、服务器、外部依赖等进行全覆盖的压测,并持续调优的过程,以找到系统的瓶颈点,对系统容量进行真实客观的预估。


全链路压测是应对当前复杂分布式环境下,系统面临的诸多不确定性可能导致系统可用性问题的一套解决方案。由于真实世界很难被100%模拟,常规的功能测试、非功能测试无法确保线上系统的稳定可靠,分布式环境下单个系统ready不代表全局ready。系统不可用的原因可能是分布式环境全链路中任意一个环节出了问题,全链路压测解决方案通过技术手段模拟海量用户的真实业务场景,让所有性能问题无所遁形,解决客户线上系统面临的以下痛点:

  • 线上关键业务系统的稳定可靠,关乎企业的生死存亡。
  • 测试一切安好,生产却莫名出各种问题。
  • 分布式系统拆分后,在测试环境运行得很好,每个子系统似乎都没问题,但全局整体系统会出问题。
  • 资源不合理分配,有的忙,有的闲,存在浪费。
  • 想做业务创新,但不知道该投入多少资源预算。


网站和App类的用户都有全链路压测的需求,用来检测在各类场景下产品的性能,以便在上线前(或者大促活动前)提前发现性能问题。在大型复杂分布式应用系统中,全链路压测解决方案对提高最终交付系统的可靠性起到保障作用,具体的应用场景如下:

  • 新系统上线:通过全链路压测准确探知站点能力,防止系统一上线就被用户高并发流量打垮。
  • 技术升级验证:大的技术架构升级后进行性能评估,以验证新技术场景的站点性能状态,防止技术升级影响业务的正常运行。
  • 业务峰值稳定性:大促活动等峰值业务稳定性考验,保障峰值业务不受损。
  • 站点容量规划:对站点进行精细化的容量规划,分布式系统机器资源分配,提高资源的整体利用率。
  • 性能瓶颈探测:探测系统中的性能瓶颈点,进行有针对性的优化,以最小的投入带来性能的最大提升。


全链路压测方案实施过程包括压测场景梳理(性能目标、时序图、状态图、系统架构、数据架构、技术架构)、全链路压测执行步骤、技术要点、环境改造(影子表、序列隔离、挡板拦截、mock、日志过滤、压测标识传递)、打底数据导入、压测数据(参数化)准备、工具支持等。

在一个应用系统准备实施全链路压测之前,首先需要确定具体的压测模式和场景,对于生产环境压测和测试环境压测,所要做的前期准备工作是完全不一样的;而仅压测只读流量,还是读写流量同时压测,二者对系统的影响也是不一样的。


全链路压测的所有数据都在生产环境做了数据隔离,包含存储、缓存、消息、日志等一系列的状态数据。在压测请求上会打上特殊的标记(压测标识),这个标记会随着请求的依赖调用一直传递下去。任何需要对外写数据的地方都会根据这个标记的判断写到隔离的区域,我们把这个区域叫作影子区域。


对数据库而言,一般通过在业务数据库中创建影子表来建立影子区域。影子表是指表结构跟正常业务表完全一样的测试表(一般通过表特殊命名加以区分,如影子表为正常业务表加固定前缀),数据库持久层代理需要识别压测流量,并把压测流量的数据读写全部路由到影子表中,通过这样的方式实现压测数据的隔离。采用影子表的方案主要是为了方便压测数据的路由,以及压测结束后的数据清理还原。


在压测过程中,对于所有调用的外部第三方服务,一般无法要求进行压测改造,我们通过挡板mock的方式进行拦截仿真,以防止压测对外部系统产生流量负担及数据污染。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
4月前
|
负载均衡 NoSQL 关系型数据库
性能基础之全链路压测知识整理
【2月更文挑战第16天】性能基础之全链路压测知识整理
266 11
|
监控 测试技术 UED
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
260 0
|
域名解析 网络协议 数据可视化
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
184 0
|
SQL 监控 关系型数据库
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
175 0
|
数据可视化 测试技术 定位技术
全链路压测(14):生产全链路压测SOP
从实践经验的角度出发,生产全链路压测在技术实现上没有太多新花样,但要在不同的业务和企业落地,就各有各的实践路径。对于没有太多经验的同学来说,全链路压测的落地,大多还是基于个人的经验和熟悉的领域,即都是在局部作战,缺乏全局的视角和可视化地图。从全局来讲,缺少适用于自己的全链路压测最佳实践。
全链路压测(14):生产全链路压测SOP
|
存储 SQL 缓存
全链路压测(13):高可用和性能优化
业务场景复杂化、海量数据冲击下,发现并解决业务系统的可用性、扩展性以及容错性问题。
全链路压测(13):高可用和性能优化
|
监控 Java 测试技术
全链路压测(12):生产压测必不可少的环节
在生产环境开展全链路压测,相对于测试环境来说风险和成本都是比较大的。因此需要一套严格的流程管控和响应机制,以及高效的团队协同体系。
全链路压测(12):生产压测必不可少的环节
|
缓存 监控 安全
全链路压测(11):聊聊稳定性预案
从业务角度来讲,无论技术做任何的改动和优化,最终的目的都是为了业务目标的达成。而系统的稳定性,无论从用户体验还是业务目标达成的角度来看,都是不可忽视的一环。
|
12天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
34 2
|
7天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存