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-sandbox框架原理圖

設計思想(更新中…)

  1. sandbox快速使用手冊
  2. 如何支持agent方式和attach方式啓動?
  3. 編寫的模塊如何支持SPI模式?
  4. 字節碼是如何增強的?
  5. 事件是如何監聽通知到的?
  6. 源碼示例壞掉的鐘是如何被修復的?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章