1. 程式人生 > >我發起了一個 .Net Core 平臺上的 開源專案 ShadowDomain 用於 熱更新

我發起了一個 .Net Core 平臺上的 開源專案 ShadowDomain 用於 熱更新

大家好,  我發起了一個 .Net Core 平臺上的 開源專案 ShadowDomain  用於 熱更新 。

 

簡單的說, 原理就是 類似 Asp.net 那樣 讓 當前 WebApp 執行在一個 App Domain 中,

當 WebApp 的 Bin 目錄 或者 Web.config 被更新時, 就會 建立一個 新的 App Domain,

我們把 這個 新的 App Domain 稱之為  “New Domain”,  

把 原來的 正在執行的 App Domain 稱之為  “Old Domain” ,

 

然後, 將 更新後的 程式(Bin目錄 ,  Web.config)  執行在 New Domain 下,

然後, 等 Old Domain 裡把 已經在 處理的 請求 都 處理 完成後,  就 停止 和 銷燬 Old Domain 。

 

這樣就可以 實現 線上熱更新,或者 執行中熱更新, 

也不需要考慮 更新檔案 後 要 重啟 應用程式 等問題 。

 

這個專案裡 包含 3 個 部分 :

1  一個 Host 框架 for Kestrel,   這是 Asp.net 的部分

2  一個 Host 框架 for Windows Service,    這是 Windows Service 的部分

3  一個 Host 框架 for Linux AP ,  就相當於是  Linux 上的  Windows Service, 我不知道 Linux 上的 Windows Service 叫什麼, 就叫 AP 好了

 

1 的 原理就是 把   Kestrel 作為一個 應用(AP), 通過 Host 建立一個 App Domain , 讓 Kestrel 執行在這個 App Domain 裡,

有更新的話, 就像上面說的,  建立一個 New Domain , 讓 更新後的 程式 執行在 New Domain, 

同時 等 Old Domain 處理完 請求, 則 停止 和 銷燬 Old Domain 。

 

2 , 3  的 原理 類似 。

 

至於 Shadow Domain, 也許是指 New Domain, 也許是指 Old Domain, 我記不清了……  反正都講得通 。哈哈哈

 

Shadow Domain 這個專案 的 意義在於 為 ServerFul 架構 提供了支援,

有關 ServerFul 架構, 請參考我寫的另一篇文章  《》