毫无疑问。 ASP.NET 已经成熟,现在绝大多数 ASP.NET 应用程序都是高流量和关键任务。 这意味着您无法承受整个网站或许多用户被淘汰的某些服务器的计划外停机时间。 这是因为这些停机时间让您付出了沉重的收入损失和难以修复的坏名声。
如果处理不当,ASP.NET 会话状态存储可能会导致计划外停机。 Microsoft 为 ASP.NET 会话状态提供了四种存储选项:
- 进程内: 会话保持在工作进程中
- 状态服务器: 会话保存在单独的进程中
- 数据库服务器: 会话保存在 SQL Server 中
- 自定义: 会话保存在第三方自定义存储中
以上皆是 进程内 StateServer 没有能力将 ASP.NET 会话状态复制到多个服务器,因此如果任何 Web 服务器出现故障,都会导致数据丢失。 事实上,如果你有一个单 状态服务器 对于整个网站并且它崩溃了,你完全被淹没了,因为你的整个网站都会崩溃。
数据库服务器 是 ASP.NET 会话状态的第三个存储选项,它确实提供了服务器冗余和数据复制,因为您可以构建数据库集群,无论是镜像集群还是负载平衡集群。
但是,设置 SQL Server 集群的成本很高,并且有更便宜和更可行的替代方案可用。 此外,SQL Server(与所有关系数据库一样)旨在存储结构化关系数据,而不是 BLOB; 而 ASP.NET 会话状态作为 BLOB 存储在 SQL Server 中。 因此,不仅会话访问速度很慢,而且当您尝试扩展应用程序时,数据库很快就会成为瓶颈。
所有这一切的一个更好的选择是使用自定义存储选项 ASP.NET 会话状态 并使用内存中的分布式缓存(NCache) 作为您的 ASP.NET 会话状态存储。 NCache 跨多台服务器复制会话,因此如果任何一台服务器出现故障,会话数据不会丢失。 NCache 访问速度也比 SQL Server 快得多,因为它是在内存中的。 最后, NCache 允许您随着网络场大小的增长轻松扩展缓存集群。 只需向集群中添加更多缓存服务器,就不会出现瓶颈。
而且,最重要的是,无需编程即可使用 NCache 用于 ASP.NET 会话状态存储。 只需修改您的 web.config 以指定以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<assemblies> <add assembly="Alachisoft.NCache.SessionStoreProvider, Version=4.4.0.0, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/> </assemblies> <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="20"> <providers> <add name="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionAppId="NCacheTest" enableLogs="false" cacheName="myReplicatedCache"/> </providers> </sessionState> |
好吧,如果您有一个在网络场中运行的 ASP.NET 应用程序,请查看 NCache 看看它将如何改进您的 ASP.NET 会话状态存储。 这里有一些有用的链接 NCache:
您可以从缓存集群中至少使用两台专用服务器开始,以获得高可用性和可靠性,然后建议在 Web/应用程序服务器和缓存服务器之间保持 4:1 的比率,以获得应用程序的最佳性能和可扩展性。