我发起了一个 .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 架构, 请参考我写的另一篇文章 《我发起了一个支持 ServerFul 架构的 .Net 开源项目 ServerFulManager》
https://www.cnblogs.com/KSongKing/p/9899199.html
同时, 像 ServerFul 架构一样, 简化了 服务器集群管理 的 工作, 比如 不需要考虑 重启应用, 只需要 覆盖文件, 省去了 编写脚本 重启应用 等工作, 以及 避免了 使用 容器(比如 Docker)等 复杂技术 。
不过 实际 实现起来 问题 也很多 。 比如 Kestrel, 按照上述的原理, Old Domain 要处理完当前已经在处理的请求 才会 停止和销毁 。
而 是否已处理完请求 这只有 Kestrel 自己才知道 , 所以 ShadowDomain 大概要 Kestrel 自己来实现才行 。
而 一台计算机(操作系统)上 端口号 是不能重复的, 所以 我们又不能 在 原来的 Kestrel 还在运行的时候 另外启动一个 Kestrel 进程,
So …… 。
至于 IIS 托管 的 Kestrel, 情况可能更复杂 …… 。
所以, 还是 写个脚本吧 ~! 写个脚本 来 控制 Kestrel 的 启动 停止, 这不算难, 这也是 ServerFul 架构 。
不过这里又引出一个 额外的问题, 就是 如果要 Kestrel 不间断更新(不停机更新) 的话, 怎么办 ?
大概要 增加 一台 备机, 做一个 主备 或者 负载均衡,
不过这在 云计算 和 虚拟化技术 普及 的 今天, 应该不是 大问题 。
我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新的更多相关文章
- 我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis
Redis 的 安装 是 复杂 的, 使用 是 复杂 的, Redis 的 功能 是 重型 的, Redis 本身的 技术实现 是 复杂 的 . Redis 是用 C 写的, C 语言 编写的代码需要 ...
- 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager
大家好, 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...
- 我发起了一个 .Net 平台上的 开源项目 知识图谱 Babana Map 和 文本文件搜索引擎 Babana Search
起因 也是 前几天 有 网友 在 群 里发了 知识图谱 相关的文章, 还有 有 网友 问起 NLog -> LogStash -> Elastic Search 的 问题, ...
- 我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore
我之前还发起过一个 项目, 名字也叫 HtmlCore, 见 <我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore> https://www.cnblo ...
- 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...
- ImageSharp一个专注于NetCore平台图像处理的开源项目
今天大家分享的是一个专注于NetCore平台图像处理的开源项目,老实说为这篇文章取名字想了5分钟,可能是词穷亦或是想更好的表达出这款开源项目的作用:这个项目在图像处理方面有很多功能,如:缩放,裁剪,绘 ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- 微人事 star 数超 10k,如何打造一个 star 数超 10k 的开源项目
看了下,微人事(https://github.com/lenve/vhr)项目 star 数超 10k 啦,松哥第一个 star 数过万的开源项目就这样诞生了. 两年前差不多就是现在这个时候,松哥所在 ...
- 使用cvs或svn从sourceforge上获取开源项目的方法[转载]
著名开源软件网站(www.sourceforge.net)上面的开源项目,大部分使用的管理工具为cvs或svn. 这两种软件的代表客户端程序是wincvs和tortoiseSVN. 1.cvs C ...
随机推荐
- linux Bash 常用
linux 帮助文档 man + [命令] eg: man ls[命令] + --help eg:ls --helphelp +[命令] eg:help ceinfo + [命令] eg:info l ...
- spring的官方文档地址
https://docs.spring.io/spring/docs/current/spring-framework-reference/
- wxPython的使用--类似画板的界面
# -*- coding: utf-8 -*-import wximport wx.lib.buttonsimport cPickleimport os class PaintWindow(wx.Wi ...
- linux各种系统下载地址
1.Arch Linux Arch Linux在安装过程中提供了强大的可定制选择,支持你下载和安装自己所需的程序包.虽然这个选择对新手来说没有多大的帮助,但是它确实能够帮助那些使用Arch构建系统和存 ...
- Java学习笔记31(IO:Properties类)
Properties类,表示一个持久的j集,可以存在流中,或者从流中加载 是Hashtable的子类 map集合的方法都能用 用途之一:在开发项目中,我们最后交给客户的是一个编译过的class文件,客 ...
- elementUI 日期 周一、周二、周三、周四、周五、周六、周日快捷键
<el-date-picker v-model="ruleForm.pickDateMeal" type="daterange" align=" ...
- Golang游戏服务器与skynet的个人直观比较
我对和GOLANG写MMO服务器的一些遐想: 1.沙盒(隔离性) SKYNET:原生LUA STATE作为沙盒, 进行服务器间隔离安全性高: 服务可以很容易的配置到不同节点之上. GO:估计用RECO ...
- thinkphp5.0自定义验证器
虽然我早就会些php基础语法,我套过数据,自己写的控制器层,不是用的api方式,那个公司是为了锻炼我,所以才那样做的,基本上的东西都是用的框架自带的,重来自己没有去封装过这些东西,所以编程思想上,还很 ...
- 【转载】 强化学习(三)用动态规划(DP)求解
原文地址: https://www.cnblogs.com/pinard/p/9463815.html ------------------------------------------------ ...
- 【转载】 opencv, PIL.Image的彩色图片维度 && caffe和pytorch的矩阵维度
原文地址: https://blog.csdn.net/u011668104/article/details/82718375 ------------------------------------ ...