python 關於熱更新與熱加載

聊聊熱加載、熱更新

知識有限,只談談自己對這塊的瞭解,說的不對的地方還希望指出哈。
前段時間有個哥們說java微服務 有個配置中心spring cloud config 可以做到 配置文件熱更新、熱加載。基於此,提供一套Python 方案,當然對於spring來說,這個方案確實有點過於簡陋(精簡),尤其是如果用於微服務的時候。python 的微服務還不夠完善,後續關注下nameko +py某web框架 有沒有類似的方案,大家如果有時間也可以順着spring 的方案弄一個唄,如果不覺得繁瑣的話。當然如果項目不大的話,其實是可以直接重啓唄,也就不到兩秒鐘的事情。看看各位的項目需要。

1、修改代碼使用reload

其實就是在代碼中import 相關模塊,並用reload 方法重新加載相關參數,這種方法會實際上修改代碼,在不需要重啓服務的情況下,重新加載相關模塊。在網上找了個簡單的例子:https://blog.csdn.net/u013421629/article/details/89211695
只要提交代碼到服務器上就可以了,簡單粗暴,不需要重啓。但是如果代碼中有大量的地方需要reload。確實有點頭大。

2、修改內存中的配置文件

因爲項目的配置文件中的變量屬於全局變量。這時候可以修改這個全局變量。這就更加簡單了。提供一個接口(此處安全問題暫時忽略),傳遞配置文件相關參數。在接口中修改相關全局變量。

3 、autoreload

框架中的自動加載模塊。試了幾下,沒成功,略過了,應該是可以的。

4、參照spring cloud config的方案。手動實現

原理介紹
springCloudConfig分服務端和客戶端,服務端負責將本地,git或者svn中存儲的配置文件發佈成REST風格的接口,客戶端可以從服務端REST接口獲取配置。但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh接口。而我們上面說的SpringCloudBus就發揮了其作用了

SpringCloudBus通過一個輕量級消息代理連接分佈式系統的節點(有點像消息隊列那種)。這可以用於廣播狀態更改(如配置更改)或其他管理指令。SpringCloudBus提供了通過post方法訪問的endpoint/bus/refresh(spring boot 有很多監控的endpoint,比如/health),這個接口通常由git的鉤子功能(監聽觸發)調用,用以通知各個SpringCloudConfig的客戶端去服務端更新配置。
在這裏插入圖片描述

git服務器會從遠程git拉取配置文件,並存入到本地git文件庫,當遠程git不可用時,會從本地git文件庫拉取配置信息

下面是一張spring cloud config結合bus的一張工作流圖(來自於某大神)
在這裏插入圖片描述

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