我们目前为网站设置了当前服务器: 服务器1:管理系统数据库 服务器2:公共站点 服务器3:公共站点 使用Windows网络负载平衡系统管理服务器2和3.它们都运行公共站点代码的副本. 这些
>服务器1:管理系统&数据库
>服务器2:公共站点
>服务器3:公共站点
使用Windows网络负载平衡系统管理服务器2和3.它们都运行公共站点代码的副本.
这些网站严重依赖会话,因为他们使用用户登录,我的问题是:
如何在服务器之间保留状态?
公共站点的web.config目前如下所示:
<sessionState mode="StateServer" cookieless="false" timeout="40" stateConnectionString="tcpip=localhost:42424"/>
当然,这只是将“localhost”更改为我想要存储会话的I.P的情况?我正在考虑使用数据库服务器来存储会话,所以它看起来像这样:
<sessionState mode="StateServer" cookieless="false" timeout="40" stateConnectionString="tcpip=databaseserverIP:42424"/>
这是明智的吗?
我发现了很多关于这个主题的相互矛盾的文档,并希望有人能够深入了解他们之前/将会如何做到这一点.
此外(虽然我在这里!),管理系统允许您上传文章的图像.我正在考虑在服务器2和3上设置一个虚拟目录,这将指向网络共享映射到管理站点上的上传目录,是否有任何理由不赞同这个?
为我的无知道歉,这对我来说是一个未知的领域!
谢谢,肖恩
取决于您想要的国家服务.通常在负载平衡的场景中,您可以使用SQL Server会话或ASP.NET状态服务.
每个都有它的pro / con(SQL Server会话需要序列化/反序列化,但是如果服务器崩溃则保持状态,如果服务器故障转移,ASP.NET状态不会保持状态,但由于没有序列化/反序列化,它会更快).
无论如何,考虑在独立的独立机器上托管服务 – 因此它不会与其他进程争夺资源.
关于这两者的讨论需要您进一步研究 – 就像您的主要关注点是可用性还是速度一样.
请记住,如果要在Web服务器(即webfarm)之间共享会话,则需要将每个服务器的machineKey设置更新为相同.
Here’s一篇关于ASP.NET Session State的好文章(以及我提到的machineKey问题).