在多服务器生产环境中处理MVC会话状态

时间:2017-04-26 19:38:27

标签: asp.net-mvc session iis

因此,我作为开发人员在我的第一个生产工作中开始为一家公司工作,我正在编写一个MVC Web应用程序。告诉我们某些数据我们不希望有任何持久存储,所以只需将其保留在会话中。我刚刚完成了生产环境的设置,以便我们可以自动部署到服务器。

我是以滚动部署的方式这样做的。从机器排出连接,将其取下,部署新代码,重新启动,然后再运行下一台机器。

从我的第一次测试开始,这似乎会破坏会话数据,这是我所担心的。当用户切换机器时,IIS中是否有一种方法可以传输会话数据,或者我需要某种共享文件存储来恢复,以防必须从机器中删除用户以将新代码加载到其上。

我正在使用Big-Ip作为负载均衡器来进行排水,我认为它不一定了解IIS。首次体验生产级别部署的复杂性,无需停机时间。我想,如果有必要,我需要一个文件存储备份来“恢复”。只是想确保我没有错过任何东西。

1 个答案:

答案 0 :(得分:0)

服务器场的最佳实践(即使它只是两个)是不要使用会话来做任何事情。除了会话可能导致性能问题(会话访问被序列化并且随着负载增加而降低性能)这一事实时,Session也被视为瞬态存储,并且可以随时消失。重新启动IIS应用程序池时,会话将丢失(无论是有意还是无意)。此外,如果会话开始在资源上运行不足,IIS甚至可以在会话过期之前对其进行转储。

会话基本上是不可预测的,并且不可靠。如果发现会话数据消失,您在会话中放置的任何内容都应该可以从应用程序重建。

当然,这是针对进程内会话。您可以使用绑定到数据库的状态服务器,但这也会影响性能。特别是如果你大量使用会话。

一般情况下,将您的应用设计为不使用会话,除非它是可以在不再找到时轻松重新创建的琐碎事物。