状态服务器还是 SQLServer?
- 存储 ASP.NET 会话变量的最佳解决方案是什么?
- 各自的优缺点是什么?
- 在任何特定情况下,一个比另一个更好吗?
状态服务器还是 SQLServer?
这里有一些关于赞成/反对的想法。我还添加了 Microsoft Velocity 分布式缓存解决方案。
我认为假设您正在使用某种网络农场。
状态服务的一种用途是在 Web Garden(同一台机器上的多个工作进程)中。在这种情况下,您可以使用负载平衡来保持用户与特定服务器的连接,并让 n 个工作进程共享相同的状态服务。
编辑:在网络花园 + 状态服务或 sql 服务器场景中,您还可以在没有连接的客户端丢失会话的情况下回收该机器上的工作进程。
我不熟悉将 SQL Server 用作会话状态存储,但我认为您可以通过在集群中使用 SQL Server 来获得稳健性。在这种情况下,您仍然可以拥有多个工作进程和多个服务器,但您不必使用粘性会话(服务器关联)。
还有一点需要注意的是,您可以在第二台机器上使用状态服务,并让场中的所有服务器都访问该机器,但您会遇到单点故障。
最后,还有第 3 方(和一些本土的)分布式状态服务类应用程序。其中一些比其他选项具有性能优势,而且 Session_End 事件实际上会触发。(在状态服务和 SQL Server 会话支持中,Global.asax 中的 Session_End 不会触发(可能有一种连接到 SQL Server 的方法))。
在 n 层环境中,使用 SQL Server 托管会话状态,您将为后端创建额外的网络流量,同时丢失一些现在需要处理额外流量(与会话相关的请求)的 SQL Server 资源)。SQL Server 状态管理也比状态服务器慢。
但是,如果您的服务器在某些不可预见的事件中出现故障,SQL Server 很可能会维护会话信息,而不是状态服务器。
根据我的个人经验,我在存储会话变量时遇到了一些问题。我一直在丢失会话,我相信这是防病毒软件,当它扫描服务器中的每个文件时,IIS 会重新编译站点以终止会话。(我必须说我对那台服务器没有任何权力,我被告知在那里托管应用程序)
所以我决定将会话存储在 SQL Server 中,现在每个人都很高兴......它非常快
查看这篇文章以快速启动
Using a single machine to store state in a web garden means a single point of failure. We use SQL state, but it does add a bit of overhead.
在 Proc 中非常快。但有局限性。我们只能使用单个系统。当系统重新启动时,信息将丢失。同一台机器上的工作进程
StateServer 将会话信息存储在其他机器中。Web Farm 可以使用会话。例如:多个工作进程可以从服务器访问会话信息。当重新启动服务器时,信息将丢失。
SQLServer 用于将信息存储在表中。默认它将存储在 TempDB 中。这个 tempdb 会在调用 sqlservice 之后动态调用。所以这也不会持久化数据。在这个场景中,我们可以使用脚本存储在我们自己的数据库中,这称为自定义选项。