我發起了一個 .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 架構, 請參考我寫的另一篇文章 《》