3

我有一个相当开放的一般问题(即“取决于平台、应用程序类型等”),但我正在寻找一般准则作为答案。

什么时候设计应用程序以实现连续运行(100% 正常运行时间)与计划的每日关闭/重启?

显然,Web 应用程序需要一直处于运行状态,因此假设我们正在讨论一个内部企业应用程序,例如会计系统或仅在工作日工作时间活跃使用的 B2B 系统。

我听到的每个论点如下:

Pro 100% Uptime:“一旦你的应用程序运行起来,最好保持它运行,因为当你关闭它时它可能不会重新启动。”

Pro Daily 重启:“一个连续运行了 3 年的应用程序可能有一天会宕机,没有人知道如何让它重新上线。”

其他考虑因素是内存增长、性能、维护需求等。这是一个编程问题,因为您所做的选择会影响您的技术设计。例如,如果您知道应用程序将每天关闭/重新启动,则无需每天编写某些批处理作业和清除状态。

想法?

4

6 回答 6

5

在我看来,您支持和反对 100% 正常运行时间的论点都是愚蠢的论点。如果您担心应用程序在关闭时无法重新启动,那么您遇到的问题比正常运行时间问题更大。同样,如果您觉得没有人知道如何在长时间正常运行后将其重新上线,您就会遇到培训和文档问题。

现实情况是,在内存消耗和性能方面,您应该始终设计一个高效的应用程序。通常,通过这样做,您最终会得到一个应用程序,该应用程序可以作为一个长时间运行的进程或一个经常重新启动的进程成功地存活下来。请记住,由于操作系统更新等原因,您的典型计算机系统无论如何都会定期重新启动。

除非您有保证 100% 正常运行时间的要求和服务水平协议,否则只要您有效地设计应用程序,这通常不是您必须过度关注的事情。

于 2009-08-30T14:16:57.353 回答
4

对不起,但我没有明白这一点,或者这个问题完全没有意义。

一个应用程序,任何应用程序,都应该被设计成,IMO,除非需要,否则它会一直运行。如果一个应用程序/平台需要每天重新启动,那么它就有内存泄漏或错误,或者它通常写得不好。

“不要让它保持太久,否则你会冒着没人会记得如何再次打开它的风险”这一点非常可笑。我将应用程序管理(运营)作为我的日常工作,我从未见过一个应用程序熬夜超过一个月。在那之后,您必须应对操作系统维护、数据库修补、软件升级等。

因此,总结一下:编写可以在需要时保持运行的应用程序。

于 2009-09-12T11:50:23.573 回答
3

什么时候设计应用程序以实现连续运行(100% 正常运行时间)与计划的每日关闭/重启?

我认为这确实是一个与应用程序设计正交的问题。许多 Web 服务器和应用程序容器都可以支持热重启。换句话说,这与其说是“应用程序设计”的问题,不如说是技术的选择问题。例如,您可以完全避免这个问题,只需拥有 N 个应用程序副本 (N > 1),然后系统地关闭特定实例以进行维护并根据需要重新启动。

此外,业务需求和要求应该确定适当的停机时间,而不是您选择的技术。

Pro Daily 重启:“一个连续运行了 3 年的应用程序可能有一天会宕机,没有人知道如何让它重新上线。”

胡说八道。这是一个社会/组织论点,而不是技术论点。这可以通过一个明显的构建过程来解决,其中包括启动服务器作为其可能的任务之一。这将“重新启动”的任务减少为单个命令。

于 2009-08-30T14:15:22.987 回答
0

如果你对你的团队不是特别有信心,最好时不时地下去,把所有的东西都清理干净。一天一次可以做到,但是从这个到“从不”有一个范围......

但这通常是由业务限制决定的。如果您还没有这些限制...

那么,你为什么不也推迟你的决定呢?

于 2009-08-30T14:15:19.743 回答
0

正如其他人所说,如果您不能信任您的应用程序可以重新启动,那么您将面临更大的问题。

根据经验,我对网络应用程序的一般个人建议是每天循环一次(在凌晨,即在最低流量点),在整个服务器集群上交错。无论您的应用程序的内存效率如何,尤其是 Web 应用程序在较长的正常运行时间内总是会出现缓存膨胀问题,并且您接受重启的必然性,您绝对希望它按您的计划发生,而不是随心所欲w3wp.exe。

当然,这一切都取决于您拥有的服务器数量、您拥有的流量管理器(如果有的话)以及您的流量配置文件是什么样的。

于 2009-08-30T15:04:23.190 回答
0

除了“如果您需要重新启动它,您的应用程序还不够好”的想法(我认为它们很完美并且我喜欢它们)之外,我更喜欢中间的一些东西作为预防措施。

如果您的应用程序不是太大,并且一个人可以轻松地重新启动它,那么每月重新启动一次或每年 3/4 次就可以了。这样,您将确保系统管理员知道如何去做(人们有时会从公司来来往往),并且他的知识也会保持新鲜。

如果您遇到问题并且您的系统管理员两年前没有重新启动应用程序,他将提供几本手册并完成课程,但可能他忘记了一些步骤,或者他没有那么快地解决问题。

其他要考虑的主题是:“是一个完全实现的应用程序,还是您仍在开发它?” 如果它是为自己制作的应用程序,您仍然在上面编写代码并频繁升级新功能,那么更频繁地重新启动它可能会很有趣。如果出现问题,它更有可能隐藏在新代码中。它将帮助您的程序员修复它,并帮助您的系统管理员随时了解应用程序正在发生的事情。

当然,制作完美的应用程序始终是最重要的元素,但是……好吧,我们都知道并非总是可能的

于 2009-09-12T11:25:03.417 回答