【发布时间】:2014-08-07 14:32:52
【问题描述】:
我们目前的系统每天有超过 200,000 个唯一会话请求,因此我们引入了一个带有负载平衡器的新服务器来处理负载。这就是问题所在,因为我们的 sessionstate ="InProcess"。一旦用户启动应用程序,我们会在 Session 中加载一些重要的变量,因为这些变量在整个应用程序中使用,而不是在每个页面都访问数据库,我们将其存储在 Session 对象中。哪个有效,但使用这种方式,我们必须确保应用程序池不会回收,而是每天一次,并且在停机时间期间,这会使服务器内存在一天中变得巨大。请记住,该系统是从系统 A 启动的,因此如果这些主要值丢失,则必须由系统 A 重新打开应用程序
解决方案 1:替换使用 Session 对象将变量存储到应用程序缓存中(但这是否能够在 App Pool 回收期间保留它们的值)
解决方案 2:为这些值在每个页面中访问 SQL 服务器数据库(但我认为这不能很好地扩展以持续打开和关闭连接以获取我可以在应用程序中维护的信息)
解决方案 3:更新用于序列化的会话对象并在混合中添加一个 StateServer 以处理在应用程序池回收期间和跨两个服务器保留的会话(但这不会降低性能)。
解决方案 4:使用隐藏控件将这些值保存到代码的客户端,并在每次点击时将这些值发送到服务器。这些属性不是敏感信息,所以这应该不是问题
【问题讨论】:
标签: asp.net scalability session-state database-performance