JVM-Sandbox?動態(tài)非侵入 AOP 解決方案
JVM-Sandbox,JVM 沙箱容器,一種基于 JVM 的非侵入式運行期 AOP 解決方案。
JVM-SANDBOX 的核心功能:
實時無侵入 AOP 框架
在常見的 AOP 框架實現(xiàn)方案中,有靜態(tài)編織和動態(tài)編織兩種。
靜態(tài)編織
靜態(tài)編織發(fā)生在字節(jié)碼生成時根據(jù)一定框架的規(guī)則提前將 AOP 字節(jié)碼插入到目標(biāo)類和方法中,實現(xiàn) AOP;動態(tài)編織
動態(tài)編織則允許在 JVM 運行過程中完成指定方法的 AOP 字節(jié)碼增強。常見的動態(tài)編織方案大多采用重命名原有方法,再新建一個同簽名的方法來做代理的工作模式來完成 AOP 的功能(常見的實現(xiàn)方案如 CgLib),但這種方式存在一些應(yīng)用邊界:
侵入性
對被代理的目標(biāo)類需要進行侵入式改造。比如:在 Spring 中必須是托管于 Spring 容器中的 Bean固化性
目標(biāo)代理方法在啟動之后即固化,無法重新對一個已有方法進行 AOP 增強
熱部署特性
還有一些實現(xiàn) AOP 的方式是通過類似熱部署的方式完成,但現(xiàn)有的熱部署實現(xiàn)方案也存在一些應(yīng)用邊界:
性能折損巨大
對 JVM 存在侵入性
必須啟動時顯式開啟
基于此通過 JDK 6 所提供的 Instrumentation-API 實現(xiàn)了利用 HotSwap 技術(shù)在不重啟 JVM 的情況下實現(xiàn)對任意方法的 AOP 增強。而且性能開銷還在可以接受的范圍之內(nèi)。
動態(tài)可插拔容器
為了實現(xiàn)沙箱模塊的動態(tài)熱插拔,容器客戶端和沙箱動態(tài)可插拔容器采用 HTTP 協(xié)議進行通訊,底層用 Jetty8 作為 HTTP 服務(wù)器。
JVM 沙箱都有哪些可能的應(yīng)用場景
線上故障定位
線上系統(tǒng)流控
線上故障模擬
方法請求錄制和結(jié)果回放
動態(tài)日志打印
安全信息監(jiān)測和脫敏
除此之外,JVM 沙箱還能幫助你做很多很多……
