StateServer或SQLServer?
答案 0 :(得分:11)
以下是关于亲/骗局的一些想法。 我还添加了Microsoft Velocity Distributed Caching解决方案。
答案 1 :(得分:3)
我认为假设你正在使用某种类型的网络农场。
状态服务的一种用途是在Web Garden中(同一台机器上有多个工作进程)。在这种情况下,您可以使用负载平衡来保持用户与特定服务器的连接,并让n个工作进程共享同一个状态服务。
编辑:在Web园+状态服务或SQL服务器方案中,您还可以在连接的客户端丢失其会话时回收该计算机上的工作进程。
我对使用SQL Server作为会话状态存储并不熟悉,但我认为通过在群集中使用SQL Server可以获得健壮性。在这种情况下,您仍然可以拥有多个工作进程和多个服务器,但您不必使用粘性会话(服务器亲缘关系)。
还有一点需要注意,您可以在第二台计算机上使用状态服务,并让服务器场中的所有服务器都能访问该计算机,但您会遇到单点故障。
最后,还有第三方(和一些本土的)分布式状态服务类应用程序。其中一些比其他选项具有性能优势,而且Session_End事件实际上会触发。 (在State Service和SQL Server会话支持中,Global.asax中的Session_End不会触发(可能有一种挂钩到SQL Server的方式))。
答案 2 :(得分:1)
在n层环境中,使用SQL Server托管会话状态,您将为后端创建额外的网络流量,以及丢失一些现在需要处理额外流量的SQL Server资源(会话)相关的要求)。 SQL Server状态管理也比状态服务器慢。
但是,如果您的服务器因某些无法预料的事件而中断,SQL Server很可能会维护会话信息,而不是状态服务器。
答案 3 :(得分:0)
根据我的个人经验,我在会话变量中存储了一些问题。我一直在失去会话,我相信它是反病毒,因为它扫描服务器中的每个文件,IIS会重新编译该站点杀死会话。 (我必须说我对该服务器没有权力,我被告知要在那里托管应用程序)
所以我决定将会话存储在SQL Server中,现在每个人都很高兴......这是非常快的
快速了解this article
答案 4 :(得分:0)
使用单台机器在Web园中存储状态意味着单点故障。我们使用SQL状态,但它确实增加了一些开销。
答案 5 :(得分:0)
在Proc中非常快。 但有限制。我们只能使用单一系统。 当重启系统时,信息将丢失。 工人在同一台机器上处理
StateServer将会话信息存储在其他计算机中。 Web Farm可以使用该会话。例如:多个工作进程可以从服务器访问会话信息。 当重启服务器时,信息将丢失。
SQLServer用于在表中存储信息。默认它将存储在TempDB中。 调用sqlservice后,此tempdb将动态调用。 所以这也不会持久化数据。在这个场景中,我们可以使用脚本存储在我们自己的数据库中,称为自定义选项。