【问题标题】:out of process session state in orchard果园中的进程外会话状态
【发布时间】:2015-06-04 17:07:47
【问题描述】:

我们在构建于 Orchard 之上的应用程序中使用了默认会话状态(在 proc 中)。现在管理层决定在两者之间安装一个负载均衡器。为了使我们的会话仍然有效,我想使用 Out of process session 状态。但是,我有点困惑,是否应该在我使用过会话的特定模块的“Orchard.web”模块中启用它。

我试图搜索 Orchard 是否以其他方式支持 proc 会话,或者它应该与普通 asp.net 应用程序类似的方式。

任何帮助将不胜感激

【问题讨论】:

    标签: orchardcms session-state


    【解决方案1】:

    首先 - 我很确定 Orchard 团队建议不惜一切代价避免会话状态。任何具有会话状态的东西(根据定义)都是有状态的,这使得向外扩展更加困难。但是,假设您无法避免它:

    1) 它只是一个 ASP.NET 应用程序,适用正常规则。确保在应用程序配置中设置了相同的机器密钥,配置您选择的会话状态机制(SQL/状态服务器)并在 web.config 中配置适当的值。

    然而

    2) 标准 ASP.NET 会话状态实现的锁定非常差。这可能会导致您的页面出现不良响应问题。在session state performance 上查看这个出色的问题(和链接的帖子)。您应该自己评估是否需要锁定会话状态。我们必须完全删除会话状态,以便为我们的应用程序提供可接受的性能(并且我们从未回头或找到一个合理的论点来支持 session 而不是 caching 自 p>

    【讨论】:

    • 不能再同意了。会话使用通常被认为是一种不好的做法(它会付出巨大的代价)。 Http 协议在设计上是无状态的,因此任何维护服务器端 session 的尝试都是一种解决方法。默认会话实现确实很差(强制同步请求处理) - 有更好的方法来实现类似的行为(缓存等)。
    • 嗯,从技术上讲,当我们使用TempData 时,我们正在在很多地方使用会话。不过,它比通用会话状态的问题要少,因为它非常不稳定,并且通过一些正确配置的亲和力,它可以正常工作。
    • 此外,您可以使用不使用会话的不同 TempData 提供程序,但例如饼干:github.com/brockallen/CookieTempData
    【解决方案2】:

    扩展的经典解决方案是使用粘性会话。大多数负载平衡器都有此设置,这将允许您继续使用 inproc 会话。而且,如果您不打算使用 Auto Scaling,那么您的 LB 后面将始终拥有固定数量的服务器,那么这是您应该仔细考虑的解决方案。
    退出 proc 可能会让您有些头疼,例如将您放入会话中的所有类都标记为可序列化。

    【讨论】:

    • ...如果单个服务器出现故障,该服务器上的所有用户都会丢失会话。所以你需要记住这一点。理想情况是完全避免会话,因为当您拥有无状态服务器时,它是迄今为止最具可扩展性的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2011-01-09
    • 2013-11-30
    相关资源
    最近更新 更多