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

Asp.net mvc 在多服务器生产环境中处理MVC会话状态,asp.net-mvc,session,iis,Asp.net Mvc,Session,Iis,因此,我开始为一家公司工作,这是我作为开发人员的第一份生产工作,我正在那里编写一个MVC web应用程序。对于某些数据,我们不希望有任何持久性存储,所以只需将其保留在会话中即可。我刚刚完成了生产环境的设置,以便我们可以自动部署到服务器 我是以滚动部署的方式这样做的。从一台机器上断开连接,将其取下,部署新代码,将其恢复,然后执行下一台机器 从我的第一次测试来看,这似乎扼杀了会话数据,这正是我所担心的。IIS中是否有一种方法可以在用户切换机器时传输会话数据,或者我是否需要某种共享文件存储来恢复,以防

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

我是以滚动部署的方式这样做的。从一台机器上断开连接,将其取下,部署新代码,将其恢复,然后执行下一台机器

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


我正在为我的负载平衡器使用大Ip,它会消耗资源,我认为它不一定了解IIS。第一次体验生产级部署的复杂性,没有停机要求。我想,如果有必要,我需要一个文件存储备份来“恢复”。只是想确保我没有遗漏什么。

服务器场(即使只有两个)的最佳实践是不使用会话进行任何操作。除了会话可能导致性能问题(会话访问被序列化,并且随着负载的增加会降低性能)之外,会话还被视为临时存储,并且可以在任何时候消失。重新启动IIS应用程序池时,会话将丢失(有意或无意)。此外,如果会话资源不足,IIS甚至可以在会话到期之前转储会话

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

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


一般来说,将应用程序设计为不使用会话,除非它是用于琐碎的东西,如果找不到这些东西,可以很容易地重新创建这些东西。

我之前参与的一个项目使用了负载平衡器,我们必须启用粘性会话,以便一旦用户连接到一个盒子,那么该用户将始终被分配到该盒子。如果重定向到另一台计算机,会话数据将无法在进程中使用。如果您使用的是状态服务器(数据库),那么它可以跨任意数量的机器工作。