会话状态服务器与自定义会话状态提供者

O.O*_*O.O 3 c# architecture asp.net session asp.net-4.0

我的任务是扩展应用程序的会话.从我的研究中最明显的选择是使用State Server会话提供程序,因为我不需要用户会话来持久化(SQL Server Session提供程序)

关于应用程序:

  • 目前正在使用InProc会话提供程序
  • 会话中存储的所有对象都是可序列化的
  • 所有对象都很小(大多数是简单的对象(int,string)和一些简单的类实例)

在我首先进入IT领域并且能够使用ASP.NET 4提供自定义会话提供程序之前,我是否应该考虑自定义会话状态提供程序.为什么或者为什么不?那里有"好"的吗?

谢谢!用户反馈:

  • 我们为什么使用会话:回发之间的数据持久性(例如用户选择)
  • 方法:用户进行选择,存储选择.用户离开页面并返回,选择将被恢复.等等
  • 将创建一个Web场

ble*_*ech 5

这取决于"缩放"会话存储的含义.如果您只是简单地谈论会话状态性能,那么您将无法击败进程内会话状态提供程序.切换到State Server提供程序实际上会减慢速度 - 由于跨进程边界序列化和传输对象的额外开销.

State Server可以帮助您扩展的地方是,它允许负载平衡的Web场中的多台计算机共享单个会话状态.但是,它受机器内存的限制,如果您有大量并发会话,则可能需要使用SQL会话状态提供程序.

为了在Web场中获得最佳性能,您还可以尝试使用之前建议的AppFabric.我自己没有这样做,但这里有解释.

此外,这是使用Memcached作为会话状态提供程序的链接.我再次使用它,所以我不能对它提出意见......

编辑:正如@HOCA在评论中提到的,如果成本不是问题,则有第三方解决方案.我听说过(但未使用过)的是ScaleOut SessionServer.

  • +1 - 对于Web场,您必须使用进程外会话状态.根据您现有的基础架构设置,SQL状态可能是最容易开始的.如果单个SQL的加载过高,则可以在多个服务器之间拆分会话状态(使用partitionResolverType - http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx). (2认同)
  • 在过去,我们已经实现了自己的自定义Memcached Sesssion State提供程序,取得了一些成功.专业人士的速度和成本.con(3年前)是可靠性.我确信自从我们实现它以来,Memcached及其.NET接口都有大量的更新,所以如果成本是一个问题,这可能是一个值得考虑的选择.如果不考虑成本,请评估第三方解决方案,因为它们可能提供更好的可靠性和支持. (2认同)