天天看點

jvm-sanbox詳解--彙總篇

介紹

jvm-sanbox是阿裡出的基于 java.lang.instrument包做的一款工具

架構設計目标為:(摘自阿裡雲溪社群文章)

  • 故障演練:在運作前,抛出異常或增加運作時間,即:幹預方法的執行順序和改變傳回值;
  • 強弱依賴梳理:系統運作時,實時記錄系統的對外調用情況,即:感覺方法的入參和傳回值;
  • 錄制回放:運作時,記錄方法的入參和傳回值,回放時,不真實對外調用,而是直接傳回錄制時的傳回值。即:感覺方法入參和傳回值,幹預方法執行順序,改變傳回值;
  • 精準回歸:擷取每個請求的行調用鍊路,根據行調用鍊路進行場景去重,根據代碼改動的情況和行調用鍊路确定需要回歸範圍,即:運作時行鍊路感覺。

使用手冊

源碼git位址:https://github.com/alibaba/jvm-sandbox

使用手冊:源碼中wiki很詳細,不再贅述

jvmsandbox的前世今生:https://yq.aliyun.com/articles/707736

基本原理

  1. 無侵入式attach到jvm上
  2. 按照架構規則編寫搜尋要增強的類,架構會自動注入增強類/方法—偷天換日
  3. 在運作代碼的過程中,新的請求運作增強後的類(被增強重新加載),這個增強後的類中由于架構增加了許多架構級别的代碼,是以可以通知列印出各種不同的事件,甚至直接改變代碼執行流程(參考源碼中 修複一個壞掉的鐘表例子)

這裡放一張官方給出的架構圖,大神們看到這張圖估計就已經明白作者的設計思想了,如果不懂,且聽我慢慢分解

jvm-sanbox詳解--彙總篇

設計思想(更新中…)

  1. sandbox快速使用手冊
  2. 如何支援agent方式和attach方式啟動?
  3. 編寫的子產品如何支援SPI模式?
  4. 位元組碼是如何增強的?
  5. 事件是如何監聽通知到的?
  6. 源碼示例壞掉的鐘是如何被修複的?

繼續閱讀