【问题标题】:ASP.NET Session limit best practiceASP.NET 会话限制最佳实践
【发布时间】:2019-07-09 03:53:44
【问题描述】:

我们在具有 3 个实例的 Azure 应用服务中运行 PaaS ASP.NET 应用程序,并在 SQL Server 数据库中管理会话数据输出。

该应用程序已上线,我们注意到某些用户在遵循某些路径时会产生大量会话数据,例如一些用户的会话数据超过 500k(对于没有登录的简单站点访问,平均会话在 750 - 3000 左右,这是我所期望的)。

500k 听起来太高了,但想知道这些天在大型企业应用程序中什么是正常的,以及在会话中保存这么多数据的缺点。

我最初的想法是,

  • 对 Web 应用 CPU 没有影响(实际上可能减少),因为不经常进行查询,
  • 对 Web 应用内存没有影响,因为我们正在运行 outproc,
  • 垃圾收集运行时 Sql Server 会话数据库上的 DTU 出现大幅峰值,
  • 应用程序可能会有点慢,因为在请求之间读取和写入会话数据需要更长的时间,
  • 可能不适合互联网连接不佳的用户,
  • 如果对象范围不正确,内存泄漏可能会增加。

我的推理有道理还是我错过了什么?

任何想法和建议将不胜感激,

非常感谢。

【问题讨论】:

    标签: asp.net azure session-state paas session-management


    【解决方案1】:

    我完全同意您在 Azure 应用程序实例中使用进程外会话管理的理由。在云中使用进程内会话是绝对不可以的。托管到云的原因是通过分布式环境实现高可用性。

    从你的观点来看,我认为速度是你关心的问题,或者如果对大多数 Web 应用程序很重要,为了克服这个问题,你可能会考虑使用 Azure redis 缓存。

    这里是使用 Azure redis 缓存配置会话管理的文章:

    请参阅此处的文档:https://docs.microsoft.com/en-us/azure/redis-cache/cache-aspnet-session-state-provider

    【讨论】:

    • 感谢 Mohit 的反馈。是的,我们使用的是 Redis,但因为它没有处理我们的大型会话数据而将其关闭。我的理解是 Redis 很快,但前提是您的数据量不大。它可以处理很多密钥,但密钥(或密钥对)的大小不能太大。我怀疑我们已经达到了上限,这就是我们开始遇到问题的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2010-09-21
    • 2011-11-13
    • 2017-12-22
    • 2016-01-03
    相关资源
    最近更新 更多