【发布时间】:2012-11-09 22:13:40
【问题描述】:
我们在 RDS 服务器上有一个 Windows2008R2 RemoteAPP .NET 4.5 应用程序 NGEN-ed,大约。 3 主机 NLB 集群的 300 个并发用户。
应用程序正在积极开发中,RemoteAPP 部署的程序集需要经常更新(即替换为新程序集)。
我们目前的做法如下:
- 重命名要在 RemoteAPP 服务器上更改的文件,用户连接到它(如果文件被加载,操作系统将不允许文件被覆盖),
- 用新文件代替旧文件,
- NGEN 安装新程序集(无需先卸载旧程序集!),
- 通知用户(通过应用本身)应用版本已更改,需要重新启动,
- 逐渐允许用户按照自己的节奏重新启动应用程序(同时重新启动应用程序会导致磁盘和 CPU 负载增加,从而损害服务器性能)。 对于集群中的所有主机也是如此。
在此之后,服务器偶尔会出现蓝屏崩溃并出现 Microsoft-Windows-Kernel-Power EventID 41 严重错误 - 我强烈谴责我们的更新实践对此负责。
因此问题是:在不必终止访问旧程序集的进程的情况下更新 RemoteAPP 应用程序和 NGEN-ing 新程序集的推荐方法是什么(即允许用户在需要时继续并重新启动)。
谢谢。
【问题讨论】:
-
你找到合理的答案了吗?
-
是否可以实施 hyper-V 解决方案?新版本可以部署到影子实例,并在准备好上线后重新分配 IP 地址。如果您将前端和后端分开,那么负载也会非常小......
-
不,我无法找到这个问题的合理答案。相反,我们停止了对程序集进行 NGEN 处理并增加了系统资源。从那以后蓝屏错误就没有出现过。
-
我可能会将您的问题视为设计问题,而不是技术问题。您正在尝试使用影响 Windows 进程状态的操作创建一个具有零停机时间的动态更新应用程序。 (更改 dll 、 NGEN 需要停止进程状态。)等等。您的“始终启动”应用程序应该动态加载程序集,并且可以在运行时选择“重新加载”它们。通过这种方式,您可以部署一组程序集,对其进行 NGEN,最后要求应用程序重新加载,这样就可以解决问题
标签: .net deployment windows-server-2008-r2 ngen remoteapp