3

在工作中,对于繁忙的 ASP.NET MVC 网站的零停机部署,我们有一个相当不错的流程。有两个服务器组,因此我们可以转移流量,我们编写 db SP 以向后兼容并提前推出它们。一般来说,它运作良好。

然而,一个问题刚刚让我绊倒了。上次部署包括大量代码命名空间更改。

部署构建时,它破坏了现有的用户会话,因为处于其会话状态的对象不再存在于新的代码库中,例如,他们的会话包含 App_Code.UserDetails 并且站点现在有一个 XYZUserDetails 类

我理解这个问题以及它发生的原因,但我无法解决的是除了完全关闭网站以确保网站上没有活跃用户之外,是否还有什么可以做的。或者可能重新启动状态服务,以便每个人都被启动并必须再次登录。有什么想法吗?

4

1 回答 1

0

在考虑了这一点后,我得出了两种可能的解决方案:

a) 始终在停机时部署网站更新。将站点保持足够长的时间以使所有会话都过期。这在技术上是安全的选择,但在商业上是不可接受的

b) 模拟问题并查看可以做些什么来解决异常处理程序中的问题。尽管不是理想的最终用户体验,但在会话状态上捕获 SerializationExceptions 并刷新用户会话可能会更好。他们将不得不再次进行身份验证,但这并不像会话中断那么糟糕。

我预先做出的一个决定是,在开发过程中很难了解实时会话依赖关系,还有太多其他的事情需要考虑。

我将调查(b),因为这听起来很可行。

于 2012-10-25T14:05:55.077 回答