阿里巴巴徐冬晨:JVM-Sandbox會讓你腦洞大開
原創(chuàng)【51CTO.com原創(chuàng)稿件】七年一劍,華麗蛻變。自2012年起連續(xù)6年15場峰會,凝聚大量技術(shù)專家,博觀而約取,厚積而薄發(fā)。2018WOT全球軟件與運(yùn)維技術(shù)峰會揚(yáng)帆起航,圍繞12大核心熱點(diǎn),匯聚海內(nèi)外60位一線專家,打造高端技術(shù)盛宴!在5月18-19日的2018WOT全球軟件與運(yùn)維技術(shù)峰會上,來自阿里巴巴的測試開發(fā)專家徐冬晨女士將為我們帶來題為《JVM-sandbox穩(wěn)定性體系的構(gòu)建》的主題演講。
日前,徐冬晨接受了51CTO的采訪,搶先與大家分享在構(gòu)建JVM-sandbox過程中的酸甜苦辣。連續(xù)參與6年天貓雙十一的她,在服務(wù)端穩(wěn)定性方面,經(jīng)驗(yàn)豐富、見解獨(dú)到。
阿里巴巴測試開發(fā)專家徐冬晨
建模歷時(shí)一年困難重重
JVM-SANDBOX從有想法到最終成型,大概經(jīng)歷了一年的時(shí)間。在2016年中,天貓雙十一催動(dòng)了阿里內(nèi)部大量業(yè)務(wù)系統(tǒng)的改動(dòng),恰逢徐冬晨所在的團(tuán)隊(duì)調(diào)整,測試資源保障嚴(yán)重不足,迫使他們必須考慮更精準(zhǔn)、更便捷的老業(yè)務(wù)測試回歸驗(yàn)證方案。開發(fā)團(tuán)隊(duì)面臨的是新接手的老系統(tǒng),提出測試方案不允許業(yè)務(wù)代碼架構(gòu)以滿足可測性的特殊要求,也迫使很多現(xiàn)有測試框架無法應(yīng)用到現(xiàn)有業(yè)務(wù)系統(tǒng)架構(gòu)中。更精準(zhǔn)、更便捷、更無感的需求,需要新的測試思路和測試框架,所以也推動(dòng)了徐冬晨歷時(shí)一年,苦心研發(fā)出JVM-SANDBOX。
研發(fā)的過程中***的挑戰(zhàn)是考慮和適配現(xiàn)有不同架構(gòu)的業(yè)務(wù)系統(tǒng),一開始徐冬晨打算采用SpringAOP的方式來完成相對業(yè)務(wù)代碼透明的AOP織入方式,但很快發(fā)現(xiàn)并不是所有業(yè)務(wù)代碼都托管在Spring容器中,而且更底層的中間件代碼、三方包代碼無法納入到回歸范圍。更糟糕的是測試框架會引入自身所依賴的類庫,經(jīng)常與業(yè)務(wù)代碼的類庫產(chǎn)生沖突。
最終,她跳出原有思路,撇開SpringAOP,在更底層的JVMTI來完成這套AOP邏輯的實(shí)現(xiàn),破壞了雙親委派原則來實(shí)現(xiàn)類的隔離策略。在這一層實(shí)現(xiàn)AOP,尤其是attach的啟動(dòng)模式,對現(xiàn)有的AOP字節(jié)碼編織方案都做了限制,JDKProxy、CgLib等常見的AOP實(shí)現(xiàn)框架都無法滿足需求,所以我們用ASM構(gòu)造了一套精巧的字節(jié)碼編織策略。
JVM-Sandbox能為我們做什么
在JVM-Sandbox的世界觀中,任何一個(gè)Java方法的調(diào)用都可以分解為BEFORE、RETURN和THROWS三個(gè)環(huán)節(jié),由此在三個(gè)環(huán)節(jié)上引申出對應(yīng)環(huán)節(jié)的事件探測和流程控制機(jī)制。不僅如此還有LINE事件,可以完成代碼行的記錄?;贐EFORE、RETURN和THROWS三個(gè)環(huán)節(jié)事件以及LINE事件,可以完成很多類AOP的操作。
例如,它可以感知和改變方法調(diào)用的入?yún)?、可以感知和改變方法調(diào)用返回值和拋出的異常、可以感知一個(gè)請求按順序執(zhí)行了哪些行、可以改變方法執(zhí)行的流程等。
在方法體執(zhí)行之前直接返回自定義結(jié)果對象,原有方法代碼將不會被執(zhí)行;在方法體返回之前重新構(gòu)造新的結(jié)果對象,甚至可以改變?yōu)閽伋霎惓#辉诜椒w拋出異常之后重新拋出新的異常,甚至可以改變?yōu)檎7祷亍?br />
談及JVM-Sandbox的應(yīng)用場景時(shí),徐冬晨如是說,JVM沙箱還能幫助你做很多很多,取決于你的腦洞有多大了。它的應(yīng)用場景例如:線上故障定位、線上系統(tǒng)流控、線上故障模擬、方法請求錄制和結(jié)果回放、動(dòng)態(tài)日志打印、安全信息監(jiān)測和脫敏、行鏈路計(jì)算和覆蓋率統(tǒng)計(jì)等。
JVM-Sandbox為阿里提速增效
使用了徐冬晨的JVM-Sandbox之后,阿里業(yè)務(wù)在很多方面有所提升:例如故障演練方面,2017年故障演練平臺在JVM-Sandbox基礎(chǔ)上僅耗時(shí)1周即完成故障注入部分的系統(tǒng)重構(gòu)。重構(gòu)后的系統(tǒng)在掛載效率和掛載成功率方面有了明顯的提升,極大的縮短的故障演練的時(shí)間,演練效率提升了數(shù)十倍。與16年故障演練數(shù)據(jù)對比,17年的故障演練平臺,覆蓋BU提升了1.6倍,覆蓋應(yīng)用提升了5倍,覆蓋場景提升了37倍。
2017年強(qiáng)弱依賴自動(dòng)化檢測平臺誕生。它提供了依賴檢測、強(qiáng)弱分析、依賴掃描、故障注入等多種能力,底層能力基于JVM-Sandbox在1周內(nèi)完成功能開發(fā)。強(qiáng)弱依賴梳理方面,承載了淘寶的系統(tǒng)強(qiáng)弱依賴梳理工作,260+個(gè)應(yīng)用一鍵接入系統(tǒng),并實(shí)現(xiàn)了0人工成本的自動(dòng)化、智能化梳理。
在錄制回放方面,線上錄制隔離回放不僅極大的縮短的業(yè)務(wù)回歸的耗時(shí),把業(yè)務(wù)測試同學(xué)從繁瑣的數(shù)據(jù)準(zhǔn)備和接口自動(dòng)化腳本的編寫過程中解放出來,而且極大的拓展了覆蓋范圍,使回歸的范圍更貼近用戶,且場景更豐富。在精準(zhǔn)回歸方面,2017年在JVM-Sandbox的基礎(chǔ)上,利用LineEvnet實(shí)現(xiàn)了行鏈路識別和標(biāo)記,有效的提升了錄制回放的精準(zhǔn)度和效率。
歷時(shí)一年,精心編寫,徐冬晨的這一套JVM-Sandbox是動(dòng)態(tài)非侵入AOP解決方案屏蔽了字節(jié)碼增強(qiáng)技術(shù)的高門檻,降低了研發(fā)運(yùn)維成本,同時(shí)又能支持上層多個(gè)工具平臺功能的快速實(shí)現(xiàn)和動(dòng)態(tài)管理,無疑為阿里巴巴的多項(xiàng)業(yè)務(wù)開展提供了有力保障。
想要了解更多?5月18-19日,北京o粵財(cái)JW萬豪酒店,全球最值得關(guān)注的IT技術(shù)盛宴與您不見不散。2018WOT全球軟件與運(yùn)維技術(shù)峰會一定是您發(fā)現(xiàn)全新思路、挖掘***思想、拓展人脈的重要平臺。
目前我們的各項(xiàng)票種已全面發(fā)售。需要提醒您的是,購票越早,折扣越大!與KOL零距離交流,呈現(xiàn)不一樣的"英雄盛宴"!
點(diǎn)擊官網(wǎng)了解詳情:wot.51cto.com
8折預(yù)售中,搶票從速。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】