大家好, 我发起了一个 .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 架构, 请参考我写的另一篇文章 《》
原文地址:https://www.cnblogs.com/KSongKing/p/10176695.html