【问题标题】:Updating a service without interruption不间断地更新服务
【发布时间】:2014-03-07 13:54:15
【问题描述】:

我第一次需要不间断地更新服务。到目前为止,我不得不停止 IIS 上的应用程序,然后替换文件,然后重新启动应用程序。我需要能够即时将此服务热交换为新服务。我只需要在现有方法中添加新方法或正确代码。我绝不会更改当前存在的方法参数。如果需要,我将创建全新的方法,我的应用程序将慢慢更改为指向新方法。

我现在的问题是该服务使用其他服务,并且它们一起形成了一个非常高安全性的系统,如果我停止该服务超过 8 秒,那么当前使用该应用程序的每个人都会被踢出。其他服务在内部确实与该服务在网络内进行通信,以及对用户在我们的任何应用程序上执行的每一个操作进行身份验证。所以我们有 WAN 和 LAN 呼叫。因为它是一个 3 步身份验证(如果我们集成了联合凭据,可能需要 4 个之后的身份验证),如果一个步骤被关闭,那么一切都会被切断。

我想知道是否有解决方案?

我正在考虑连接到 2 个服务的前端服务。一个是实时服务,另一个是备份。当我要更新时,我切断了 Live,前端将检测到 Live 服务上没有连接,并将落在备份服务上。然后我更换直播并再次上线,前端将再次开始阅读直播。几个小时后,我可以用实时副本替换备份以进行下一次更新。 无论如何,这仍然给我带来了前端每次都需要实现新服务的问题。

【问题讨论】:

  • 也就是说,您将无法在没有任何中断的情况下进行热部署。部署更新文件后,至少您需要循环目标服务所在的应用程序池。
  • 谢谢,但我会先尝试@davidb 提示。与 IIS 重定向相比,关闭应用程序池非常慢

标签: .net wcf iis .net-4.0


【解决方案1】:

您可以创建一个相同的应用程序并将用户重定向到此应用程序,方法是在进行更改之前使用 DNS 更改或 IIS 中的简单重定向。

您提到内部用户暗示该应用仅在内部使用?如果是这样,您可以强制将您的域/网络上的 DNS 更改为新应用程序,他们永远不会知道其中的区别。与此同时,对您的“实时”应用进行更改,然后再次进行反向 DNS 更改。

您总是可以在几个小时内执行更改。每个应用程序时不时都需要一个维护窗口。

【讨论】:

  • 这个服务也是外部的。我有 2 个可从外部访问的 WCF 和 1 个内部 WCF,只有这 2 个外部 WCF 也可以说话,并且用于防止这 2 个之间的任何通信出去并被篡改。这 2 项服务在时间上匹配并确保以低性能成本获得最佳安全性。加密是在内部完成的,信息的来回路由每次都在变化,每约 8 秒使用一次新的加密密钥。使用国际应用程序的时间很困难,但 IIS 重定向似乎是一个不错的后备想法。我会调查的。
  • 好的,这很好用。甚至还有一些命令可以轻松做到这一点,例如AppCmd.exe set vdir "[APPLICATION NAME]" -physicalPath:"[NEW PATH]" 更改发生在不到 0.02 秒内,所以速度相当快。对失败的每个函数进行简单的二次调用就足以满足少数仍然失败的情况。无论如何,大多数调用都快到 0.05 秒,所以应该不会有太多错误。
【解决方案2】:

实现这一目标的唯一机会(我认为)如下:

您将所有逻辑(将被更新)保存在一个单独的库中,该库是动态加载的(和卸载的 [关键字:单独的 AppDomain]!!)。因此,对于(坏)示例,您可以在每次调用方法时重新加载此程序集。这样你就可以在不停止服务的情况下即时替换这个 dll。

但这也有一些缺点:例如这会降低性能。此外,您将必须实施自己的安全检查(没有恶意黑客、破解者或任何东西可以用包含危险代码的库替换您的库。

不幸的是,这是我所知道的唯一选择。我希望这可以帮助你一点。

【讨论】:

  • 制作一个 DLL 对我没有帮助,因为前端服务需要一个新的 WSDL 来公开新方法,所以我也需要更新他。我一直在研究 Azure,我想知道他们是否有热插拔功能。如果我可以在我的服务器上热交换 RAM,我不明白为什么我不能使用你知道的服务!
  • 哦,对不起。我没有意识到您不是在谈论 Windows 服务。不幸的是,我从来没有这么多地使用过 .net 网络技术。
  • 不用担心,WCF 服务现在也是 .DLL 文件,只是通过 IIS 公开。它现在很神奇,无需注册。
  • 听起来很有趣。我想我会尽快调查的。
  • 我想我“不小心”找到了另一种可能适合您的解决方案:msdn.microsoft.com/en-us/library/ms404279.aspx 也许有帮助。
【解决方案3】:

您可以使用 WebDeploy - 它会比您手动完成所有操作更快。它仍然会停止应用程序,然后换出文件,然后再次启动应用程序,但在大多数情况下,当我这样做时,没有人注意到(诚然不是一个繁忙的服务)

【讨论】:

  • 会上厕所,但你只是在内部有 10-15 个选定的用户来使用这项新服务,我每秒很容易收到 2-3 个请求。现在我只有 1 个带有该服务挂钩的应用程序,但是当我获得所有应用程序和所有用户池时,大约有 150-200 个并发连接。可能会有问题。无论如何都会检查谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 2017-04-12
  • 1970-01-01
相关资源
最近更新 更多