加入收藏 | 设为首页 |

体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖

海外新闻 时间: 浏览:489 次


阿里妹导读:稳定性是历年双11的技能质量确保中心。从 2016 年开端淘宝技能质量部悉心修行,创新地研发了一套实时无侵入的字节码增强结构,所以「JVM-SANDBOX」诞生了,并且随手在 MTSC 大会上拿了开源奉献奖,今日,咱们来瞅瞅这个拿奖的项目。

在近来举办的中国移动互联网测验开发大会(简称MTSC大会),来自淘系技能质量开源项目「JVM-SANDBOX」以及淘系同学参加保护的「 ATX」 包办了 MTSC 2019 年度开源奉献奖,赞誉曩昔一年在测验范畴开源项目中的突出奉献。其间,「JVM-SANDBOX」致力于为服务端稳定性范畴供给实时无侵入的字节码增强结构。

一、JVM-Sandbox的诞生

功用回归、事务/体系监控、问题排查定位、强弱依靠、毛病演练等是阿里 10 年双十一沉积堆集下来的稳定性专项,也是历年双十一质量确保的中心要素。要有用、轻量级地完结这些稳定性专项,都会触及到一块底层技能—— java 字节码增强。假如每个专项都能自己完结一套字节码增强逻辑,完结的门槛高、投入和保护本钱高,且不同专项间相互影响形成不行预知的危险。怎么屏蔽字节码增强技能的高门槛,降低本钱,一同又能支撑上层多个专项功用的快速完结和动态办理,成为淘宝技能质量部的方针。从 2016 年开端咱们悉心修行,创新地研发了一套实时无侵入的字节码增强结构,所以 「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 JVM—Sandbox的中心事情模型

BEFORE、RETURN 和 THROWS 三个环节事情的正常流通和干涉流通。

2.3 全体架构


沙箱总共由三大中心功用组件构成

  1. 代码织造组件:担任完结预设代码的重写和收效;
  2. 事情处理分发组件体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖:担任完结事情的分发和办法流控操控的履行;
  3. 模块办理组件:担任操控和办理沙箱的各个模块。

沙箱的底层供给了一个 HTTP-SERVER(Jetty),经过 HTTP 协议完结 sandbox.sh和沙箱的操控交互,一同也给各个模块供给了根据 HttpServlet 和 WebSocket 标准的 API,各模块能够复用沙箱完结各自模块的操控与交互。

三、事务的实践作用

3.1、体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖线上毛病演练

17年毛病演练渠道在 JVM-Sandbo体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖x 基础上仅耗时1周即完结毛病注入部分的体系重构。重构后的体系在挂载功率和挂载成功率方面有了显着的提高,极大地缩短毛病演练的时刻,演练功率提高了数十倍。根据 JVM-Sandbox 改造后的毛病演练渠道,通用性强,一切根据 JVM 发动的体系均支撑,极大地拓宽了毛病演练的规模,毛病演练已到达集团级布置。

与16年毛病演练数据比照,17年的毛病演练渠道,掩盖 BU 提高了1.6倍,掩盖使用提高了5倍,掩盖场景提高了37倍。18年毛病演练渠道掩盖了阿里集团,并演化为现在的攻防演练。

3.2、依靠检测

17年强弱依靠自动化检测渠道诞生。它供给了依靠检测、强弱剖析、依靠扫描、毛病注入等多种才能,底层才能根据 JVM-Sandbox 在1周内完结功用开发。使用其模块容器的特性,将前人开发的模块与新增模块体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖一同挂载一同作业,完结渠道功用。

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

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

在 JVM-Sandbox 基础上开发了一个 SS 模块,相当于一个录音机+回放机, 在调用中耿间件的时分, 次序录制下了咱们的中间件恳求,并且存储这份‘磁带’到服务器上。当咱们需求阻隔回放的时分, 将这份‘磁带’找到, 并且在需求的时分直接从‘磁带’读取, 并不需求真实地恳求咱们的中间件, 这样就确保了咱们的读、写接口也能做到可重复运用,然后完结服务端的阻隔回放。线上录制阻隔回放不只极大地缩短事务回归的耗时,把事务测验同学从繁琐的数据预备和接口自动化脚本的编写过程中解放出来,并且极大地拓宽了掩盖规模,使体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖回归的规模更靠近用户,且场景更丰厚。

3.4、精准回归

服务端录制阻隔回放机制诞生之后,尽管有用地提高了掩盖规模,降低了自动化脚本的人工投入,可是也带来了新的问题。线上录制的场景是海量的,单个体系都能够到达万级、十万级乃至百万等级的录制,这些录制的场景中,存在很多的重复场景,怎么辨认重复场景,完结有用、精准的回放,成为新的待处理问题。在 JVM-Sandbox的基础上,使用 LineEvnet 完结了行链路辨认和符号,有用地提高了回放的精准度和功率。

四、开源社区

现在根据 JVM-Sandbox,上层有阿里两个开源的模块:chaosblade——毛病演练,Repeater——录制回放,后续还会逐渐开源其他模块功用,社区现在已经有900+的人群参加评论共建,累计取得2000+的star支撑,JVM-Sandbox的社区建造也等待您的参加。

五、结束语

咱们的每一步都是为测验范畴的标准化建造做尽力,期望更多对测验技能开展感爱好的小伙伴能够参加社区,一同为测验范畴的开展做奉献。

假如您有爱体彩排列三-JVM-SANDBOX:从阿里精准测验走出的开源贡献奖好参加淘系技能质量团队,和咱们一同投入到测验范畴开展建造中,欢迎投递简历至 taobaoqa2019@list.alibaba-inc.com。

作者: 何霜霜(谢萱)