我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

Posted 凯特琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我发起了一个 .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 架构, 请参考我写的另一篇文章  《》

 

以上是关于我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新的主要内容,如果未能解决你的问题,请参考以下文章

我发起了一个 .Net 平台上的 直播平台 开源项目 BalaBala

我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlSharpCore

.Net Core 环境搭建

.Net Core 系列:1环境搭建

我发起了一个 支持 PostgreSql 的 外围设施 的 .Net 开源项目

.NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存