StateServer 还是 SQLServer?
存储 ASP.NET session 变量的最佳解决方案是什么? 各自的优缺点是什么? 在任何特定情况下,一个比另一个更好吗?
这里有一些关于赞成/反对的想法。
我还添加了 Microsoft Velocity 分布式缓存解决方案。
InProc 的优点
可用的最快可选(全部在内存/ram 中)易于设置(.config 文件中不需要任何新内容。我认为这是默认行为)。 我相信大多数人都使用这个。 InProc 的缺点
如果网站(应用程序池)死掉,那么所有的 session 信息都会丢失。 在 WebFarm 方案中不起作用 -> session 信息仅针对每个应用程序池。 不能包含非 session 信息。 StateServer 的专业版
在内存/内存中,所以它很快(但有一些净延迟......阅读下面),所以它可能不如 Inproc 快。 Web 场方案的默认配置。多个 iis 站点使用状态服务器来控制状态 session 信息。 状态服务器的骗局
需要将 ASP.NET StateServer 服务设置为运行。 StateServer 需要一些配置调整来接受“远程 iis 机器”请求。 如果 iis 请求需要在另一台联网机器上获取/设置 session 信息,则存在一些微小的网络延迟。 不能包含非 session 信息。 SqlServer 的 Pro(作为状态服务器)
状态始终保留,即使在 iis 站点重新启动后也是如此。 Con's for SqlServer(作为状态服务器)
最慢的解决方案 -> 净延迟和硬盘延迟(因为 sql server 将状态存储在硬盘上/从硬盘读取)。 最难设置/配置。 不能包含非 session 信息 Pro's for Velocity(或其他分布式缓存系统)
可以处理的不仅仅是 session 信息 -> 对象、应用程序设置、缓存等(IMO 这是一件非常好的事情!!)可以是仅内存或持久化到数据库。 如果一个“节点”出现故障,系统仍然可以工作。 (假设有 2 个以上的缓存节点)Con's for Velocity(或其他分布式缓存系统)
一般费用$$$最难设置(必须安装东西,调整配置,添加额外的特殊代码)。 有网络延迟(通常没有),但如果服务将数据持久化(例如到 Sql Server),则可能有硬盘延迟。