【问题标题】:Correct way of updating a RemoteAPP application with NGEN使用 NGEN 更新 RemoteAPP 应用程序的正确方法
【发布时间】:2012-11-09 22:13:40
【问题描述】:

我们在 RDS 服务器上有一个 Windows2008R2 RemoteAPP .NET 4.5 应用程序 NGEN-ed,大约。 3 主机 NLB 集群的 300 个并发用户。

应用程序正在积极开发中,RemoteAPP 部署的程序集需要经常更新(即替换为新程序集)。

我们目前的做法如下:

  1. 重命名要在 RemoteAPP 服务器上更改的文件,用户连接到它(如果文件被加载,操作系统将不允许文件被覆盖),
  2. 用新文件代替旧文件,
  3. NGEN 安装新程序集(无需先卸载旧程序集!),
  4. 通知用户(通过应用本身)应用版本已更改,需要重新启动,
  5. 逐渐允许用户按照自己的节奏重新启动应用程序(同时重新启动应用程序会导致磁盘和 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


【解决方案1】:

我建议使用新的“用于 IIS 7.5 的应用程序初始化模块”来加速您的 Web 应用程序,并且“应用程序初始化”内置于 IIS 8 而不是 ngen。

Microsoft 的网站声称:IIS 7.5 的 IIS 应用程序初始化使网站管理员能够通过在第一个请求到达之前加载 Web 应用程序来提高其网站的响应能力。

参考: http://weblog.west-wind.com/posts/2013/Oct/02/Use-IIS-Application-Initialization-for-keeping-ASPNET-Apps-alive

【讨论】:

    【解决方案2】:

    您可以使用通过 RemoteApp 发布的入门应用程序。启动器将依次启动应用程序的最新版本。

    例如:有一个注册表项,它是您的应用程序最新版本的路径

    1. 添加新文件夹C:\Program Files\myApp\1.0.26\
    2. ngen 新程序集
    3. 更新注册表项以指向新文件夹
    4. 启动器在运行时会启动新版本的应用程序
    5. (可选)在不再使用旧版本时将其删除

    RemoteApp 指向C:\Program Files\myApp\startApp.exe

    startApp.exe 开始 1.0.26\theApp.exe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2018-08-08
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多