熱加載、熱部署

Java應用程序運行時升級軟件,無需重新啓動的方式有兩種,熱部署和熱加載。

熱加載

熱加載即在在運行時重新加載class,實現原理主要依賴java的類加載機制,是在運行時通過重新加載改變類信息,直接改變程序行爲。在實現方式可以概括爲在容器啓動的時候起一條後臺線程,定時的檢測類文件的時間戳變化,如果類的時間戳變掉了,則將類重新載入。

 

生產環境中,由於熱加載這種直接修改jvm中字節碼的方式是難以監控的,不同於sql等執行可以記錄日誌,直接字節碼的修改幾乎無法記錄代碼邏輯的變化,對既有代碼行爲的影響難以控制,對於越注重安全的應用,熱加載帶來的風險越大,這好比給飛行中的飛機更換發動機。

基於這種不安全性,在實際生產環境中應用很少。使用熱加載的應用有兩種:

1、需要頻繁部署的應用; 2、無法停止服務的應用

在生產中,並沒有需要頻繁部署的應用,即使是敏捷,再快也是一週一次的迭代,並且通過業務劃分和模塊化編程,部署的代價完全可以忽略不計,對於現有的應用,啓動耗時再長,也並非長到無法忍受,如果真的這麼長,那更應該考慮的是如何進行模塊拆分,分佈式部署了。

對於無法停止服務的應用,比如現在的雲計算平臺這樣分佈式應用,採用分批上線也可以滿足需求,類似熱部署方案應該是放在最後考慮的解決方案。

 

開發環境中,頻繁啓動應用卻隨處可見,熱加載可以顯著的提升工作效率,強烈推薦使用熱加載方式。(jrebel插件方式)

 

熱部署

熱部署就是在服務器運行時重新部署項目。原理與類加載類似,但它是直接重新加載整個應用,這種方式會釋放內存,比熱加載更加乾淨徹底,但同時也更費時間。

熱部署作爲一個比較靈活的機制,在實際的生產上運用還是有,尤其在雲計算中運用挺多。


 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章