介紹
jvm-sanbox是阿裡出的基于 java.lang.instrument包做的一款工具
架構設計目标為:(摘自阿裡雲溪社群文章)
- 故障演練:在運作前,抛出異常或增加運作時間,即:幹預方法的執行順序和改變傳回值;
- 強弱依賴梳理:系統運作時,實時記錄系統的對外調用情況,即:感覺方法的入參和傳回值;
- 錄制回放:運作時,記錄方法的入參和傳回值,回放時,不真實對外調用,而是直接傳回錄制時的傳回值。即:感覺方法入參和傳回值,幹預方法執行順序,改變傳回值;
- 精準回歸:擷取每個請求的行調用鍊路,根據行調用鍊路進行場景去重,根據代碼改動的情況和行調用鍊路确定需要回歸範圍,即:運作時行鍊路感覺。
使用手冊
源碼git位址:https://github.com/alibaba/jvm-sandbox
使用手冊:源碼中wiki很詳細,不再贅述
jvmsandbox的前世今生:https://yq.aliyun.com/articles/707736
基本原理
- 無侵入式attach到jvm上
- 按照架構規則編寫搜尋要增強的類,架構會自動注入增強類/方法—偷天換日
- 在運作代碼的過程中,新的請求運作增強後的類(被增強重新加載),這個增強後的類中由于架構增加了許多架構級别的代碼,是以可以通知列印出各種不同的事件,甚至直接改變代碼執行流程(參考源碼中 修複一個壞掉的鐘表例子)
這裡放一張官方給出的架構圖,大神們看到這張圖估計就已經明白作者的設計思想了,如果不懂,且聽我慢慢分解
設計思想(更新中…)
- sandbox快速使用手冊
- 如何支援agent方式和attach方式啟動?
- 編寫的子產品如何支援SPI模式?
- 位元組碼是如何增強的?
- 事件是如何監聽通知到的?
- 源碼示例壞掉的鐘是如何被修複的?