作者:vivo 互联网服务器团队- Liu Yanjiang

月光宝盒是一个根据流量录制回放的主动化测验渠道,经过录制回放取代编写脚本进行主动化回归,提升测验效率和覆盖率。由于其解决方案具有很强的通用性,所以咱们把这它开源出来,希望能协助到有需求的用户。

一、月光宝盒 是什么?

Moonbox(月光宝盒)是JVM-Sandbox生态下的一款流量录制回放产品。所谓流量录制回放是服务端经过挂载agent探针主动注册到服务端,阻拦服务端调用,将所有外部调用依赖的内容(如数据库、分布式缓存、外部服务呼应等)进行完整记录形成录制流量。其中心价值是经过录制流量数据,将流量数据转化成可复用、可履行的主动化用例,快速在测验环境中进行回放比对接口返回值和外部调用依参数(见下图)。Moonbox(月光宝盒)供给了大量的常用插件,能够对常见的中间调用进行录制回放,一起也供给了十分牢靠、高功用的数据存储、计算才能。

月光宝盒(vivo流量录制回放平台)正式对外开源

二、月光宝盒 有哪些优势?

正如开头所说月光宝盒是一款面向测验、研制工程师运用的低门槛、高功用、更易于运用的主动化测验东西。这款产品已经在vivo运行了2年多了,经过咱们继续优化、打磨拥有许多有用、易用功用。它的优点主要体现在下面几方面:

2.1 全面可视化视操作(部分功用)

(1)根据使命、接口维度的流量办理才能

月光宝盒(vivo流量录制回放平台)正式对外开源

(2)详细的流量展示细节(请求、呼应、子调用)

月光宝盒(vivo流量录制回放平台)正式对外开源

(3)根据使命、接口维度的回放数据办理,叠加各种维度统计、查询才能

月光宝盒(vivo流量录制回放平台)正式对外开源

(4)易于人工剖析的回放比对结果和差异展示

月光宝盒(vivo流量录制回放平台)正式对外开源

2.2 丰厚的插件支撑

月光宝盒支撑十分多组件录制和回放才能,基本上能满足绝大多数人诉求。

月光宝盒(vivo流量录制回放平台)正式对外开源

2.3多种布置方法

  • Docker: 这种方法简单、牢靠,让您能够摒弃复杂的环境装备和装置,快速在本地体会咱们项目。
  • 常规方法: 这种方法复杂、进程繁琐,需求依照进程创建ES和MySQL数据库,初始化数据表,更新好运用装备,装置好前端node服务。

此外月光宝盒是前后端别离项目,当您运用该项目需求别离布置前端、后端,十分有助于您后续将项目布置到生产环境。

2.4 功用安全牢靠

渠道对功用进行了长时间优化,在vivo内部历经多个高并发系统验证。咱们对agent端录制流量进行了一系列安全防护,例如对相同接口一起只能有一个进入采样中,约束并行录制接口数量。服务端运用了ES贮存流量,有效提升了数据贮存规模。

三、月光宝盒 完成原理

3.1 整体架构

月光宝盒渠道分为2个部分,别离为moonbox-agent 和 moonbox-server(整体架构如下图所示)

moonbox-agent

运用Java-attach技能(实践的动态字节码增强由JVM-Sandbox完成)动态代理到方针进程上,供给流量录制和回放的增强。

moonbox-server

  • Agent端运用接口,供给装备查询、录制流量保存、流量查询、回放结果保存等服务
  • 录制使命/回放使命的装备,agent使命长途办理才能和办理后台操作界面(前后端别离布置)

月光宝盒(vivo流量录制回放平台)正式对外开源

3.2 流量录制&回放

流量录制

中心逻辑是将agent分发到用户填写的机器上(本地、长途机器),然后将agent attach到用户填写运用所对应的正确进程上去。然后经过JVM-Sandbox的BEFORE、RETRUN、THROW事件机制阻拦关键调用方位获取流量入参、出参。整体流程见下图整体流程见下图:

月光宝盒(vivo流量录制回放平台)正式对外开源

流量回放

中心逻辑是将agent分发到用户填写的机器上(本地、长途机器),然后将agent attach到用户填写运用所对应的正确进程上去,agent发动后从服务端不断拉取流量去分发到对应接口做回放,整体流程见下图:

月光宝盒(vivo流量录制回放平台)正式对外开源

心跳办理

Agent发动后会单独敞开线程固定间隔时间经过http请求给服务端上报心跳

月光宝盒(vivo流量录制回放平台)正式对外开源

3.3 Agent发动进程

履行脚本将sandbox agent attach到方针java进程上,sandbox 发动jetty服务,加载moonbox module,然后从服务端拉取moonbox装备,加载流量录制和回放插件。

月光宝盒(vivo流量录制回放平台)正式对外开源

四、 和 jvm-sandbox-repeater 关系?

Moonbox是根据jvm-sandbox-repeater从头开发的一款流量回放渠道产品。在jvm-sandbox-repeater基础上重写了许多模块,并供给了愈加丰厚功用,一起便于线上布置和运用,和jvm-sandbox-repeater差异如下:

月光宝盒(vivo流量录制回放平台)正式对外开源

五、为什么要开源?

流量录制回放技能复杂,挑战较高,开源社区虽然有许多类似产品但是在易用性方面都有一些短缺,咱们希望经过开源月光宝盒协助对该方向有爱好的开发者快速构建自己的主动化东西,一起能够根据咱们这款产品制定个性化诉求。此外,月光宝盒自身也借鉴了jvm-sandbox-repeater设计和方案,是开源的获益方,现在咱们将自己思考和探究回馈给开源社区,丰厚流量回放开源技能生态。除此之外经过社区中开发者的运用,也能够协助咱们更好的改进咱们的东西,取得更多的需求场景输入,也能让该东西取得愈加长远的发展。

六、Roadmap

月光宝盒已经完成V1.0.0版别开源,初步完成了各项重要功用开源,后续咱们会继续性的完成渠道功用、体会优化作业,一起积极收集社区运用反应的功用需求,将一些好的需求归入咱们版别方案里面。2023年咱们规划了一些迭代版别,如下图所示:

月光宝盒(vivo流量录制回放平台)正式对外开源

七、写在最后

今日月光宝盒的开源只是咱们迈出的一小步,后续咱们会继续依照方案向社区奉献版别和特性。假如您对月光宝盒有爱好,欢迎体会咱们开源产品。假如您有问题或许更好的方案,欢迎向咱们开源项目奉献反应ISSUE和奉献PR,这将是咱们莫大的荣幸。

GItHub项目地址:github.com/vivo/MoonBo…