首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以100%的正常运行时间更新应用程序

问以100%的正常运行时间更新应用程序
EN

Stack Overflow用户
提问于 2009-01-02 16:04:00
回答 5查看 998关注 0票数 10

在过去的一次采访中,有人问我如何编写一个任务关键型windows服务,它必须保持100%的正常运行时间,响应速度非常快,并且还可以更新。该服务被描述为一个基于远程处理的应用程序,它接收请求、执行计算并发回响应。

我的解决方案是有一个非常通用的服务,它只是一个网关。此服务永远不会停止。它会将请求排队,并将它们转发到单独应用程序域中的另一个服务,该服务将实际处理该请求。需要至少有两个这样的处理服务,以便其中一个可以停止更新,而另一个将响应传入的请求。服务之间的接口将包括握手以查看服务是否正在运行的能力。将存在一个非常小的超时,因此如果服务完全超时,它将不会阻止请求。我还强调了一点,这个解决方案可以很好地向外扩展,因为您可以在不同的机器上添加更多这些服务。

面试官对这个想法并不是太着迷,因为在跨应用程序域甚至跨网络的通信之间存在延迟问题。我说过,对于一个任务关键型应用程序,你应该建立一个坚如磐石的基础设施,因为单靠软件是不能解决问题的。他还说,他们目前有一个使用relfection的系统。我想过将程序集加载到应用程序域中,并观察目录中的程序集更改,但这似乎太容易出错。

有没有人构建有类似需求的东西?您使用了什么解决方案?什么不起作用?反射是一个可用的选项吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-02 16:23:58

.Net内置支持在使用程序集时对其进行更新。它名为Shadow Copy,可以在加载程序集之前有效地将其复制到单独的目录中。您仍然需要卸载appdomain,然后才能在中加载新版本,但其他appdomain仍然可以使用旧版本的程序集。这样一来,一个appdomain就可以在新appdomain加载时为请求提供服务。这也是IIS和ASP.Net处理事情的方式。

票数 11
EN

Stack Overflow用户

发布于 2009-01-02 16:48:18

没有100%正常运行的时间这回事。即使是最好的系统也将停机时间度量为"5个9“,这意味着正常运行时间为99.999%。

此外,还有一个关键点:此测量适用于计划外停机时间,如故障。这不包括您故意关闭系统以进行定期维护的时间。

在任何情况下,目标都是安装/更新软件,而不会导致停机,无论是计划的还是其他的。如果web服务器本身不支持动态重载,那么您的解决方案似乎是正确的,但我认为现在很多服务器都内置了动态重载。也就是说,你只需要将你的新文件放到服务器上,它就会自动看到某些东西发生了变化并开始使用它们。

但是,这取决于可能导致会话状态问题的更改的性质。也就是说,现有的用户会话可能以会话中存储的对象与您的新代码不兼容而告终。同样,服务器可能足够智能,可以保留原始代码的缓存副本,直到使用旧代码的所有会话终止,但可能需要您自己处理。您的“影子服务器”方法应该能很好地处理这一点。

票数 6
EN

Stack Overflow用户

发布于 2009-01-02 16:11:30

100%正常运行时间?“五个九”意味着每年315秒的停机时间。如果你能做到这一点,你真的会做得很好。

听起来是个不可能的面试问题。"...maintain 100%的正常运行时间,响应速度非常快,并且也是可更新的……“--给出了正常运行时间的一个指标,但没有给出响应能力的指标。

延迟是一个值得担心的问题,但后来他们说这是一个远程处理应用程序,所以你无法摆脱它。我认为面试官可能是为了自己的原因而不同意,也许是想看看你会如何处理。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/407235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档