|
|
51CTO旗下网站
|
|
移步端
  • WOT徐冬晨:JVM―Sandbox 基于JVM的非侵入式运行期AOP解决方案

    身兼主持人和发言人双重职责的徐冬晨轻松有生命力的开场,为我们叙了JVM―Sandbox的产生背景以及他的劣势所在,包括利用场景、基本技术、开源几个地方的情节。

    笔者:刘妮娜 来源:51CTO| 2018-06-29 13:24

    【51CTO.com原创稿件】2018年5月18-19日,由51CTO主办的天下软件与运维技术博览会在首都举行。来自五湖四海企业之技艺人才汇聚北京,畅谈软件技术前沿,共同探讨运维技术之新境界。而在此次常委会上,除了众星云集的主人翁论坛环节,12场分论坛更是各具特色,在19日下午的“微服务架构设计”成分论坛上,来自阿里巴巴淘宝技术质量部测试研发工程师徐冬晨发表了大好演讲。身兼主持人和发言人双重职责的徐冬晨轻松有生命力的开场,为我们叙了JVM—Sandbox的产生背景以及他的劣势所在,包括利用场景、基本技术、开源几个地方的情节。

    JVM—Sandbox的产生背景

    随着软件规模之壮大,系统功能的撤并,要保证阿里巴巴整整系统稳定性,要做许多工具平台和监理系统,下大力的支出测试人员都要求做哪些工作呢?徐冬晨举例说明,例如我们要做系统限流、流控、故障模拟、消息监控、链路跟踪、题材一定等等,最应该关心的是,系统架构升级之后,对基础工作有没有影响,高考者要谋求自动化测试的主意,贯彻国产化的工作回归。

    对于写接口测试的统考工程师来说,她们更想成就的一种方法是点上压制、点下回放之措施展开工作回归,这样可以大大节约资金。如果要做这样的一个回归,他艺术也是对艺术的入参和返回值进行监督,或者是监督它整枝链路上面会不会出题目。下就是监控以及链路跟踪,以及精准回归。

    徐冬晨列出了四个比较具体的面貌,要保证她的祥和的确需要做很多作业。顶我们把那些东西做一个简单的泛之后,地方的那些家伙平台就做两件事情:

    ***是艺术的监视与环绕管控,其次是进链路信息的获取与统计。以方法的监视与环绕管控为例,这就是用java,用大家最熟悉的NOP。但是使用NOP也是有的问题的,如果我们要有一度统一的监察平台,监督体系代码与代码的比重也很重大。他看来过最夸张的一个系统,监督代码和工作代码的比重是1:2,就是1/3的编码都是监督代码,而且这种监督代码是比较笨重的,是因为要发散,才能够把他发上去,这就是题材的大街小巷。

    列链路方面,为了计算覆盖率,如果我们要维持系统之灵敏度,就不能因为要做一个问题一定,要加一行日志,就重新做系统,咱们在做稳定性平台配套工具的时节,要求具备三个性状:

    ***:对于开发代码是现代化侵入的。

        其次:要实时生效,因为问题解决之时节,要保留现场,故此要实时生效。

        先后三:动态可插拔。

    要结合这样子,就要求一个动态字节码增强解决方案。如上面所说,不论是故障演练、一虎势单依赖检测、年产量录制回访、题材一定还是监控系统,如果我们每做这么一个工具平台,底层全部去落实一个动态字节码增强的话,步入的资金是很高的,是有学习门槛的。地方衍生出来的这个平台,***都市作用到一个系统内部去,其实他们底层字节码增强,这段代码会不会相互干扰,都是题材。为了消灭这些题材,为了屏蔽字节码增强的技艺高门槛,为了降低研发和运营的资金,为了上层多个模块可以动态管理。咱们就开发出JVM--Sandbox。

    JVM—Sandbox的劣势

    JVM—Sandbox既有AOP合同API的方便,又有埋点的灵敏,实时非侵入的AOP容器。他的效应方面,第一JVM—Sandbox是基于JVMTI技术规范,为观察和转移代码运行结果提供了即插即用模块接口的容器。JVM-Sandbox为AOP提供了一番新的实现方案——以插桩代替代理。

    采用人群:采用字节码增强技术,拓展工具开发、贯彻业务功能的支出、高考同学。

    基本作用:第一它提供了一番字节码增强统一API。从它提供了无切入的容器,他跟你的对象机器之间其实是与世隔膜的。先后三就是我们的容器管理。你可以在JVM—Sandbox基础上可以挂载多个模块,每个模块完成他自己之链路跟踪、题材一定这些功能是可以同时挂载的。

    采取Sandbox可以实现哪些功能呢?空泛出来是入参的观感与改变。回到值的观感与改变以及抛异常。流程的左右,推行之前返回,推行之前重新构造新的一个结果对象进行返回,独特之后重新抛出异常或者直接返回一个正常的结果,他可以起你做这些事情。徐冬晨向大家做了一番简单的介绍:

    基本操作对象  

    第一看核心操作对象,这是一番抽象的经过,咱们已经在用之有部分开源的工具,包括定位工具、高考工具,咱们抽象出来其实就是推行之前的观测和特殊观察,还有执行之前的变动以及异常改变。其实这样抽象完后,咱们的骨干事件是三个,比如说我们transform事件,三个环节正常流转和干涉流转,以及行事件,列事件其实就是在每一个代码行后面加一个插装。

    如何与目标进行隔离和通讯

    这就是说,如何保证Sandbox和对象机器之间是相互隔离的呢?书法非常简单,用一句话概括的就是:破坏双亲委派机制和自定义ClassLoader形成类隔离。向Bootstrap ClassLoader流入一个Spy类来形成通讯。其一是最原始的父母委派机制。

    破坏双亲委派机制后,如果要加载一个类的时节,他会先去看脚下的ClassLoader只是已经存在,如果没有加载的话,他会委派它的爸爸,他的父ClassLoader扮演问,你是不是已经加载了,如果它也没有加载的话,再发展询问,一直询问到 Boots trap ClassLoader。其一是原生的父母委派机制。

    破坏后的父母委派机制变成了什么?要挂载一个类,他会先看我当前的ClassLoader只是加载了,如果没加载,他会让眼前的ClassLoader尝试着去加载,也就是他不再向他的父类去询问,除非它无法加载的时节,他才会扮演问他的父ClassLoader说,你是不是已经加载了,如果父ClassLoader也没有加载的话,他会让父ClassLoader尝试着去加载。这样就完事了我之对象应用之间与Sandbox之间的隔离。

    其实Sandbox在起步的时节会做一些事件,他会为每一个Module,就是上层挂载的Module,以及Sandbox,每个Module都市饰送他新建一个ClassLoader,Sandbox和谐也会给他新建一个ClassLoader。这样的话我们就完事了Sandbox与Module之间,以及Module与Module之间,以及他们与目标应用之间的隔离。

    报道其实就是咱们在 Boots trap ClassLoader其中会注入一个Spy类,其一Spy类负责目标应用与Sandbox之间的报道,不是特别直观。

    如何形成动态插拔

    谈到如何去实现动态可插拔,徐冬晨用一句话概括:transform办法形变原生字节码,事件监听表管理模块。为什么要有这块,其实不管是对于一个系统来讲,咱们将系统方面attach一度东西,咱们最关注的是,我能不能还原,有力量再恢复回去。你增加的组成部分东西,你增加Sandbox和那些模块之后,对我之体系到底它是怎么去作用上去的,他在哪儿发生了巨变,他的怎么作用上去的,我系统还能不能还原。

    这样的话,其实这幅图就是炫耀的是这样的一件事情,咱们先看一下我们的巨变发生在哪儿,对JVM已经加载的类进行过滤(玉器由Module报告sandbox),找到需要形变的类。拿到我要形变的类之后,她会通过一个形变通道,交通过这个形变通道,形变通道上面都有哪些事情,都有哪些形变,就是由我们Sandbox加载的各国Module来决定的。

    此处相当于是一番事件监听表,其一Module对这个类发生了一次形变。如果我新增长一个Module会怎么样,整整的类会重新过滤一次,对Module指定重新加载形变。如果我减少一个Module。同样的,要求先过滤出Module指定的类,下一场进行形变。这样的话,副这个地方我们可以看出,如果我把Sandbox地方所有的模块全部卸载掉之后,任何通道就是没有形变的,没有形变的话,就是一番class而成为这个数,下一场再变成一个class,其实她就是没有形变,任何代码其实也就还原了。

    在采取Sandbox经过中,如果你只挂载Sandbox,自己对你原码是没有影响之,如果你在Sandbox基础上挂载了Module,Module决定了你影响了哪些类和哪些方法。顶你把一个Module卸载掉之后,任何形变也就消失了,这是变态可插拔来形成的。

    如上图,这是JVM-Sandbox的一个整体的架构,其一里面比较底层就是在JVMTI架构体系方面去构建的,做了部分代码编织的框架。咱们可以对他进行方法调用的重围编织,办法流程的干涉,办法路径的编制,这样的组成部分过程。水族箱会进展事件分发,事件监听,事件注销和事件的组成部分处理。这样其实就完事了,咱们完成了模块的治本,基层我们会做一些模块管理的作业。

    咱们看这个里面,多出来的一块其实这部分,这部分就是在Sandbox其中,他有个HTTP传感器,他的企图是全体Sandbox挂起之后,你的模块是要求挂载、卸载、激活、起先这些操作时,传感器来支配它。那时比较富裕的一种方法就是HTTP企图去控制,故此他里面增加了HTTP的蒸发器。故此你在Sandbox满载之后,上层的模块,其实都得以通过HTTP呼吁然后加以控制,扮演控制它的起步、卸载和加载这样的组成部分作业。

    Sandbox自己是已经开源的,能够拿到他所有的原代码。咱们盼望是有更多的同窗,能够想到更多的使用场景,并且开源出来供大家使用。

    此次WOT碰头会讲师演讲稿件由51CTO采编整理,如欲了解更多,邀请登录WWW.51CTO.COM拓展查看。

    【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】
    【义务编辑: 刘妮娜 TEL:(010)68476606】

    点赞 0
  • 水族箱  容器  解决方案
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    16招轻松掌握PPT技术

    16招轻松掌握PPT技术

    GET职场加薪技能
    共16章 | 晒书包

    289人口订阅学习

    20个局域网建设改造老

    20个局域网建设改造老

    网络搭建技巧
    共20章 | 捷哥CCIE

    645人口订阅学习

    WOT2019大地必发娱乐手机版技术博览会

    WOT2019大地必发娱乐手机版技术博览会

    合同技术、使用领域、集团赋能三大章节,13大技术专场,60+内外一线必发娱乐手机版精英大咖站台,分享必发娱乐手机版的阳台工具、书法模型、语音视觉等艺术主题,助力必发娱乐手机版落地。
    共50章 | WOT碰头会

    0人口订阅学习

    读 书 +更多

    入侵的技术

    黑客也有优劣的分。很明显对她们的嘉奖之一是采取黑客手段非法侵入我们企业的平安站点或个人系统。另一种奖励可能是她们的黑客行为结合了黑暗...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO播客


  • <optgroup id="2ee3f96b"></optgroup>