允许Web场中的会话? StateServer是否足够好?
首先给大家介绍一下当前的环境。 我们有许多ASP.NET应用程序,所有这些应用程序都在某些方面使用会话。 由于stream量级别的原因,我们在多个服务器上“负载平衡”,但是,我们的负载均衡设置为使用“粘滞会话”,因为当前所有Web应用程序都设置为使用“InProc”进行会话状态。
我们正在考虑能够删除我们的负载平衡器上的“粘滞会话”configuration,因为我们的stream量负载服务器可能并且确实会超载。 我们希望采取更平衡的方法,但必须能够使用会话。
我知道SqlServer会话状态将工作,但由于我们无法控制的原因,我们不能使用SqlServer来存储我们的状态。 在研究StateServer似乎是我们最好的select。 我们有一个额外的服务器,内置大量的内存。 这个服务器可能是我们的整个Web群集的StateServer。 我们只想知道以下事情。
1.)除了从InProc到StateServer的切换的任何潜在的序列化问题之外,在上面列出的环境中是否有丢失会话对象或产生错误的主要已知问题?
2.)除了单点故障,性能略有下降之外,还有其他一些我们需要注意的使用StateServer的问题。
3)是否有任何指标显示三种types的国家存储之间的性能差异?
这是一个体面的asp.net状态常见问题: http : //www.eggheadcafe.com/articles/20021016.asp
从这篇文章,这里是关于StateServer的一些信息:
- 在networking农场中,确保您的所有Web服务器都具有相同的MachineKey。 请参阅知识库文章313091如何做到这一点。
- 另外,确保你的对象是可序列化的。 有关详细信息,请参阅KB 312112 。
- 要在Web场中的不同Web服务器之间维护会话状态,IIS元数据库中网站的应用程序path(例如\ LM \ W3SVC \ 2)应该在Web场的所有Web服务器中都是相同的。 有关详细信息,请参阅KB 325056
我只用了sql和in-proc。 但是这些3使用SQL Server时也适用:
- 避免在会话中存储太多的信息,因为它会影响串行化和通过networking传输的数据。
- 确保你没有任何依赖于Session_onEnd的东西。 这不适用于进程外的会话。
- closures不使用它的页面上的会话。 这对于进程内会话没有任何影响,但是对于进程外来说,它会为您节省很多。
确保您的服务器etag id在网上农场同步,否则在客户端浏览器caching将会不高兴。
你有没有仔细检查你的代码,以确保一切都可以序列化的过程中,并通过局域网高效?
您是否正在解决系统中的主要性能问题? 我问,因为数据库是争用的典型来源。
我摆脱粘性会话的主要动机是操作灵活性,即循环下来有问题的服务器或部署软件升级。 因此,实施中央会话状态服务,确保您从运营angular度充分利用优势。
根据我的经验,我们发现本地状态服务器甚至使用SQL Server进行会话是非常可怕的情况,因为两者都有问题(主要是性能)。 顺便说一下,我们也在使用粘性会话。
我认为你可以通过探索其他产品来达到最好的效果。 一个免费的select将是速度,但它仍然没有释放。 另一个全面但经过validation的产品将(实际上非常昂贵) NCache 。 这甚至可以帮助您以更低的成本实现您的系统化,如果您使用它们的API,那将会是更好的结果。
看一下,看看哪个最适合你。
关于SQL Server,如果你有足够多的命中,你的服务器将很快死亡(我相信你已经有一些命中,让你做Web Farm,或者你只是为了冗余)
底线:我们正在评估Velocity,因为NCAchce非常昂贵。 然而,优势是巨大的。
我们正在使用StateServer来build立一个只有两个节点的非常小的Web服务器。
我对它的操作没有任何责任,但是我记得两年来只有两个问题需要重启服务,因为它崩溃了。
我想另外一个更多地指出接受的答案:
- 确保框架dll的版本是相同的。
在我的情况下,System.Web dll的版本是不同的,因为几个Windows更新在服务器的一个服务器上跳过。