【问题标题】:When to use Azure Cache Service for Session in ASP.NET (MVC)何时在 ASP.NET (MVC) 中使用 Azure 缓存服务进行会话
【发布时间】:2014-02-01 08:14:10
【问题描述】:
我读到在 Azure 中托管的 ASP.NET Web 应用程序中使用 Session 对象时,如果请求由不同的(虚拟)机器处理,则应用程序无法看到另一个虚拟机的 Session 变量(显然),所以它建议使用 Azure 缓存服务。
只是为了理解:
这些“虚拟机切换”也能在“普通”网站中发生吗?
我的意思是:如果我不配置冗余(即多个实例),我是否有风险“看不到”会话变量是一样的?
提前致谢。
AB
【问题讨论】:
标签:
asp.net
session
caching
azure
azure-caching
【解决方案1】:
如果您将 Azure 网站与单个实例一起使用,那么从技术上讲,您可以使用进程内会话存储,因为所有请求都由同一个实例处理。即使在 Azure 网站中使用多个实例,默认行为也是使用带有“粘性”负载平衡的 ARR,以便特定客户端的所有请求都路由到同一个实例。
但是,有时所有进程中的会话数据可能会丢失。如果一个实例失败,那么该站点将快速转移到另一个实例,并且任何内存(或磁盘)数据都将丢失。出于这个原因,最好为会话数据使用某种形式的单独的持久存储,例如缓存、表存储或 SQL 数据库(如果有必要的话)。无论如何,我相信所有 ASP.NET 会话提供程序都会出于性能原因维护底层存储的进程内缓存。
如果您使用云服务来运行您的网站,那么所有请求都会在所有可用实例之间进行负载平衡,因此单独的会话存储是必不可少的。