【问题标题】:.Net Design Architecture Scalable.Net 设计架构可扩展
【发布时间】: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


    【解决方案1】:

    解决方案 1:如果您使用内置的 .NET 缓存,则它无法在应用程序池回收后继续存在。

    解决方案 2:我不建议您编写自己的会话存储提供程序并使用任何键值存储(例如文件系统或某些文档数据库)。但实际上你是在编写自己的状态服务器。

    解决方案 3:状态服务器适用于少量实例。它也相当快,所以我更喜欢它。

    解决方案 4:如果要存储在 cookie 中的信息很大(我认为有 4kB 的限制),您可以使用隐藏的表单字段,但这不是一个优雅的解决方案。只有当我们谈论需要持久化的几个变量时,它才可用。

    我不知道应用程序,但在大多数情况下,我会选择状态服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2016-12-06
      • 2015-12-03
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      相关资源
      最近更新 更多