全链路压测(3):技术改造和测试验证

简介: 底层框架改造是目前业内较为常用的一种技术手段,它通过提供一个基础的服务或者框架,让业务应用和中间件接入即可。在压测时候,在请求头带入特殊的压测标记,即可区分正常的业务流量和压测流量来进行透传,涉及到的中间件和数据库,也会通过路由的方式透传下去。这样做的优点在于:业务几乎无需改造,侵入性低,即插即用的方式也更为灵活。

前言


上一篇聊到了项目申报和技术调研评估的话题,每个公司采用的技术栈、技术同学的偏好以及具体的业务特性都不一样,所以最终落地阶段的技术方案也会有所不同。这篇文章,来聊聊业内常见的一些数据隔离和标记透传的技术方案以及测试如何接入验证。


常见的技术方案


全链路压测要落地,最大的挑战是数据安全隔离,业内对于数据隔离,目前已知的技术方案有如下几种:


底层框架


底层框架改造是目前业内较为常用的一种技术手段,它通过提供一个基础的服务或者框架,让业务应用和中间件接入即可。在压测时候,在请求头带入特殊的压测标记,即可区分正常的业务流量和压测流量来进行透传,涉及到的中间件和数据库,也会通过路由的方式透传下去。这样做的优点在于:业务几乎无需改造,侵入性低,即插即用的方式也更为灵活。


字节码增强


字节码增强是Java的一种特性,JVM针对各种操作系统、平台都进行了定制。无论在什么平台,都可以编译生成固定格式字节码(.class文件)供JVM使用。之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。在Java中一般是用javac命令编译源代码为字节码文件,一个.java文件从编译到运行如下图所示:


640.png


字节码增强技术是一类对现有字节码进行修改或者动态生成全新字节码文件的技术,它可以在运行时对JVM中的类进行修改并重载,示意图如下:


640.png


Java的字节码技术可以应用的场景很多,比如:


  1. Mock:测试时候对某些服务做Mock;
  2. 热部署:不部署服务而对线上服务做修改,打点、增加日志等操作;
  3. 诊断工具:比如arthas就是利用Instrument,无侵入跟踪正在运行的JVM,监控到类和方法级别的状态信息;


而在全链路压测的数据隔离方面,可以通过提供一个探针的方式,让业务应用接入即可。


改造业务代码


改造业务代码,顾名思义,就是通过修改所有涉及到的业务应用代码,让每个应用可以统一识别到压测的标记流量,通过这种手段来实现数据安全隔离。但这样做有很多不足,比如:


  1. 业务改造成本太大,且风险较高;
  2. 工作量较多,和业务的快速迭代有冲突;


中间件和数据库改造


数据安全隔离的技术方案中,除了应用级别的识别透传,还有中间件和缓存以及数据库的识别和透传,业务常见的技术手段主要是如下几种:


组件名称

改造方案

分布式锁

影子key,前缀perfshadow_

Redis

影子key,用前缀区分如perfshadow_

Elasticsearch

影子索引,前缀perfshadow_

Hbase

影子namespace,前缀perfshadow_

Mongodb

影子collection,前缀perfshadow_

Mysql

影子表、影子表等方式都可,下游路由会进行相应路由

Kafka

不分topic,下游路由会进行相应路由(影子topic/影子group)

Rocketmq

不分topic,下游路由会进行相应路由(影子topic/影子group)


测试验证四部曲


推动:让业务接入


一般来说,技术方面的改造都是由基础架构团队来进行的,但改造完成后,最终还是要落地到业务应用上。如何在业务团队落地,是个很大的挑战。我个人的实践经验,主要有如下几点供参考:


  1. 找到业务团队的痛点;
  2. 从利益诉求出发,找到合作的共同点;
  3. 尽可能降低接入成本和验证过程,而不是秀技术;


评估:接入风险和成本


推动全链路压测在业务团队落地,不能一味大而全,而应该先挑选非核心的业务进行接入。接入的风险和接入成本是一定要考虑的。风险主要在于出问题后的修复效率以及对业务的影响是否足够低,技术的改造往往会伴随着大量的变更,降低变更带来的线上问题风险,对一个团队或企业来说,永远是最重要的。


确认:验证范围很重要


如何理解验证范围?技术改造接入后,为了避免大量的资源人力耗费在验证上,一定要在接入时候考虑验证的方式和手段。比如:


  1. 能否快速接入;
  2. 采用自动化的方式来快速验证一些接口链路是否正常;
  3. 接入的链路涉及到的外部调用或者下游调用,是否有mock手段;
  4. 梳理的业务场景和测试场景是否都匹配了接入的业务范围等等;


验证:功能正确性和性能损耗


完成了上诉几个步骤,在测试环境验证阶段,主要关注如下几点:


  1. 压测标记是否完整的透传到了数据库表;
  2. 下游或外部调用是否都被mock挡板过滤;
  3. 数据落库或者读库的路由逻辑是否正确;
  4. 接入前后对业务应用以及中间件的性能损耗是否在可接受范围内;
相关文章
|
9月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
10月前
|
Web App开发 人工智能 JavaScript
主流自动化测试框架的技术解析与实战指南
本内容深入解析主流测试框架Playwright、Selenium与Cypress的核心架构与适用场景,对比其在SPA测试、CI/CD、跨浏览器兼容性等方面的表现。同时探讨Playwright在AI增强测试、录制回放、企业部署等领域的实战优势,以及Selenium在老旧系统和IE兼容性中的坚守场景。结合六大典型场景,提供技术选型决策指南,并展望AI赋能下的未来测试体系。
|
9月前
|
人工智能 Java 测试技术
单元测试覆盖率的自动控制技术
Jacoco是Java程序覆盖率工具,可以在pom.xml通过配置来自动控制程序的覆盖率
206 5
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
9月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
10月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
10月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
安全 测试技术 持续交付
软考软件评测师——基于风险的测试技术
本文详细阐述了测试计划的核心要素与制定流程,涵盖测试范围界定、实施策略规划、资源配置及风险管理机制。通过风险识别方法论和评估模型,构建了完整的质量保障体系。同时,针对不同测试级别与类型提供具体配置建议,并提出技术选型原则与实施规范,确保测试活动高效有序开展,为项目成功奠定基础。内容结合实际经验,具有较强指导意义。
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。