我发起了一个 .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 ...
随机推荐
- SharePoint Framework 构建你的第一个web部件(三)
博客地址:http://blog.csdn.net/FoxDave 本篇接上一讲,我们一起来看一下如何部署和测试本地开发的web部件. 在SharePoint中预览web部件 SharePoint ...
- 小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)--转载
小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化) 在上回<小波学习之一>中,已经详细介绍了Mallat算法C++实现,效果还可以,但也存在一些问题,比如,代码 ...
- python day16--面向对象(01)
一.概念 类:具有相同属性的一类事物 比如人类是类,人类中的某个人是对象.食物是一类,米饭是一个对象 class Person: '''类体:两部分:变量部分,方法(函数)部分''' mind = ' ...
- Python Counter
from collections import Counter print(Counter("宝宝今年特别喜欢王宝强")) # 计数 lst = ["jay", ...
- js常用到的方法积累
//获取对象长度的方法 function countObjLen(obj) { var count = 0; for (var property in obj) { if (Object.protot ...
- less中使用calc
css3中可以使用calc()来实现自适应布局 例如:width:“calc(100% - 25px)” width: calc(expression); ==> expression是一个表 ...
- swift简单处理调用高清大图导致内存暴涨的情况
开发中,通常需要用到使用选取多张图片的功能,但是高清大图很吃内存,我想到的处理方案就是拿到高清大图的时候,重新绘制一张小的图片使用.至于清晰度尚可,至少我是分辨不出多大区别. 基本思路就是先固定宽,然 ...
- Python 爬虫工具 —— fake_useragent
服务器为避免爬虫工具无休止的请求,以减轻负载,会对 user agent 进行校验,即判断某一 user-agent 是否不断地进行请求.可采用如下方式进行绕过服务器的校验. UserAgent_Li ...
- spark-streaming first insight
一. Spark Streaming 构建在Spark core API之上,具备可伸缩,高吞吐,可容错的流处理模块. 1)支持多种数据源,如Kafka,Flume,Socket,文件等: Basic ...
- WEBBASE篇: 第三篇, CSS知识1
第三篇, CSS知识1 一,CSS 介绍 CSS: Cascading Style Sheets ---样式表 HTML: 搭建网页结构: CSS: 在网页结构基础上进行网页的美化: 二,CSS的使用 ...