MTSC 2019年度开源项目奖 花落淘系技术质量团队

2024-02-13 15:10

本文主要是介绍MTSC 2019年度开源项目奖 花落淘系技术质量团队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在6月28日的中国移动互联网测试开发大会(简称 MTSC 大会),来自淘系技术质量开源项目「JVM-SANDBOX」以及淘系同学参与维护的「 ATX」 包揽了 MTSC 2019 年度开源贡献奖,表彰过去一年在测试领域开源项目中的突出贡献。

640?wx_fmt=gif

MTSC 大会是中国测试行业一年一度的顶尖峰会,每年都会邀请来自国内外各大公司优秀的团队和讲师,聚焦在现今测试行业多个方向的前沿技术和优秀实践,已经逐渐成为了国内外测试行业技术发展的重要风向标。

640?wx_fmt=png

开源地址

「JVM-SANDBOX」 , 「 ATX」已在 Github 开 长按识别下方二维码,关注“淘宝技术”官方公众号,并在对话框回复“测试”即可获得下载链接、了解更多详情。

640?wx_fmt=jpeg

一、JVM-Sandbox 的诞生


功能回归、业务/系统监控、问题排查定位、强弱依赖、故障演练等是阿里 10 年双十⼀沉淀积累下来的稳定性专项,也是历年年双⼗一质量量保障的核⼼要素。要有效、轻量级实现这些稳定性专项,都会触及到⼀块底层技术—java字节码增强。如果每个专项都自己实现⼀套字节码增强逻辑,实现的门槛高、投⼊和维护成本高,且不同专项间相互影响造成不可预知的风险。如何屏蔽字节码增强技术的高门槛,降低成本,同时又能支持上层多个专项功能的快速实现和动态管理,成为淘宝技术质量量部的⽬目标。从 16 年开始我们潜心修行,创新的研发了一套实时无侵⼊入的字节码增强框架,于是 JVM-Sandbox 诞⽣了。

对上面提到的专项进行抽象分析:

  • 故障演练:在运行前,抛出异常或增加运行时间,即:干预方法的执行顺序和改变返回值;

  • 强弱依赖梳理:系统运行时,实时记录系统的对外调用情况,即:感知方法的入参和返回值;

  • 录制回放:运行时,记录方法的入参和返回值,回放时,不真实对外调用,而是直接返回录制时的返回值。即:感知方法入参和返回值,干预方法执行顺序,改变返回值;

  • 精准回归:获取每个请求的行调用链路,根据行调用链路进行场景去重,根据代码改动的情况和行调用链路确定需要回归范围,即:运行时行链路感知。

不难发现,要解决这些问题本质就是如何完成 java 方法的环绕管控和运行时行链路的获取,即 AOP 框架的解决方案。目前常用 AOP 框架的解决方案有两种: proxy 和埋点。 proxy 的优点在于已实现了统一的 API ,减少了重复投入,但是不能实时生效,需要系统编译重启。埋点的优点在于动态生效灵活度高,但是没有统一 API 。


要快速解决上边的三个问题,我们需要的 AOP 解决方案必须具备两个特性:

  • 动态可插拔,即实现埋点方式的统一的 API ;

  • 无侵入性,即解决 JVM 类隔离的问题;

基于以上需求,我们研发了 JVM-Sandbox 。


二、实现方式

JVM-Sandbox 由纯 Java 编码完成,基于 JVMTI 技术规范,为观察和改变代码运行结果提供了即插即用模块接口的容器,提供两个核心功能:实时无侵入 AOP 框架和动态可插拔的模块管理容器。


2.1、JVM-Sandbox 的核心功能

  • 使用埋点技术提供统一的 API ,来实现无需重启的 AOP 解决方案;

  • 使用容器完成 JVM 类隔离,来解决侵入性问题;

  • 提供容器管理机制,来完成各种容器的管理;


2.2、 JVMSandbox 的核心事件模型

BEFORE 、 RETURN 和 THROWS 三个环节事件的正常流转和干预流转。

640?wx_fmt=png


2.3 、整体架构

640?wx_fmt=png

沙箱一共由三大核心功能组件构成:

  • 代码编织组件:负责完成预设代码的重写和生效;

  • 事件处理分发组件:负责完成事件的分发和方法流控控制的执行;

  • 模块管理组件:负责控制和管理沙箱的各个模块;

沙箱的底层提供了一个 HTTP-SERVER(Jetty) ,通过 HTTP 协议完成 `sandbox.sh` 和沙箱的控制交互,同时也给各个模块提供了基于 HttpServlet 和 WebSocket 规范的 API ,各模块可以复用沙箱完成各自模块的控制与交互。


三、业务的实践效果

3.1、线上故障演练

17 年故障演练平台在 JVM-Sandbox 基础上仅耗时 1 周即完成故障注入部分的系统重构。重构后的系统在挂载效率和挂载成功率方面有了明显的提升,极大的缩短的故障演练的时间,演练效率提升了数十倍。基于 JVM-Sandbox 改造后的故障演练平台,通用性强,所有基于 JVM 启动的系统均支持,极大的拓展了故障演练的范围,故障演练已达到集团级部署。

与 16 年故障演练数据对比, 17 年的故障演练平台,覆盖 BU 提升了 1.6 倍,覆盖应用提升了 5 倍,覆盖场景提升了 37 倍。 18 年故障演练平台覆盖了阿里集团,并演化为现在的攻防演练。

3.2、依赖检测

17 年强弱依赖自动化检测平台诞生。它提供了依赖检测、强弱分析、依赖扫描、故障注入等多种能力,底层能力基于 JVM-Sandbox 在 1 周内完成功能开发。利用其模块容器的特性,将前人开发的模块与新增模块一起挂载共同工作,完成平台功能。

强弱依赖梳理方面,承载了淘宝的系统强弱依赖梳理工作, 260+ 个应用一键接入系统,并实现了 0 人工成本的自动化、智能化梳理。18 年与 Mock 回放相结合,实现写接口依赖自动检测功能,目前正在不断完善。

3.3、服务端录制隔离回放机制

在 JVM-Sandbox 基础上开发了一个 SS 模块,相当于一个录音机+回放机, 在调用中间件的时候, 顺序录制下了我们的中间件请求, 并且存储这份‘磁带’到服务器上。当我们需要隔离回放的时候,将这份‘磁带’找到, 并且在需要的时候直接从‘磁带’读取, 并不需要真实地请求我们的中间件, 这样就保证了我们的读、写接口也能做到可重复使用,从而实现服务端的隔离回放。线上录制隔离回放不仅极大的缩短的业务回归的耗时,把业务测试同学从繁琐的数据准备和接口自动化脚本的编写过程中解放出来,而且极大的拓展了覆盖范围,使回归的范围更贴近用户,且场景更丰富。


3.4、精准回归

服务端录制隔离回放机制诞生之后,虽然有效的提升了覆盖范围,降低了自动化脚本的人工投入,但是也带来了新的问题。线上录制的场景是海量的,单个系统都可以达到万级、十万级甚至百万级别的录制,这些录制的场景中,存在大量的重复场景,如何识别重复场景,实现有效、精准的回放,成为新的待解决问题。在 JVM-Sandbox 的基础上,利用 LineEvnet 实现了行链路识别和标记,有效的提升了回放的精准度和效率。

四、开源社区


目前基于 JVM-Sandbox ,上层有阿里两个开源的模块:chaosblade——故障演练,Repeater——录制回放,后续还会逐步开源其他模块功能,社区目前已经有 900+ 的人群参与讨论共建,累计获得 2000+ 的 star 支持,  JVM-Sandbox 的社区建设也期待您的加入。

五、结束语


我们的每一步都是为测试领域的标准化建设做努力,希望更多对测试技术发展感兴趣的小伙伴可以加入社区,一起为测试领域的发展做贡献。

 

One More Thing

我们的每一步都是为测试领域的标准化建设做努力,希望更多对测试技术发展感兴趣的小伙伴可以加入我们,一起为测试领域的发展做贡献。如果您有兴趣加入淘系技术质量团队,和我们一起投入到测试领域发展建设中,欢迎投递简历至 taobaoqa2019@list.alibaba-inc.com 。


640?wx_fmt=gif

相关推荐


640?wx_fmt=jpeg

揭秘阿里测试技术最高奖项目——“时间穿越”

640?wx_fmt=png

640?wx_fmt=png

在看点这里

640?wx_fmt=gif

这篇关于MTSC 2019年度开源项目奖 花落淘系技术质量团队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705862

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP