【问题标题】:What is the performance hit of enabling sessions on Google App Engine?在 Google App Engine 上启用会话对性能有何影响?
【发布时间】:2011-01-27 07:02:44
【问题描述】:

在 Google App Engine 上启用会话对性能有何影响?

我刚刚在我的 Google App Engine 应用中打开了<sessions-enabled>true</sessions-enabled>,现在我的请求使用的 CPU 时间始终比我启用它之前多 100 毫秒。它还使用户额外等待 100 毫秒,以便服务器响应每个请求。这似乎是一个相当大的成本,我什至没有调用 getSession 或以任何方式使用它,它仍然增加了这个额外的延迟。

我可以做些什么来加快速度吗?

编辑:奇怪的是,额外的 CPU 时间现在已经消失了。

【问题讨论】:

    标签: java google-app-engine session


    【解决方案1】:

    2018 年更新

    我知道这个问题有点老了,但我认为值得一提的是,GAE 会话的性能目前更差。这是因为 _ah_SESSION_expires 属性现在正在被索引。在查询过期会话时,拥有这个索引肯定会派上用场。但这样做有一个缺点:

    1. 存储 _ah_SESSION 实体需要 4 次写入而不是 2 次,
    2. 由于_expires 属性包含单调递增的值,因此维护其索引存在一定的争用风险,请参阅this question 了解更多详细信息。

    编辑:请注意,有一个广为流传的神话,即_ah_SESSION 实体在每次请求后会自动重写,只是为了更新过期时间戳。但是这是错误的。根据实际的implementation of SessionManager,只有在会话至少 25% 过期时才会强制执行此类重写。这显着减少了对数据存储的访问。我之所以提到这一点,是因为我原本也相信这个神话。 :D

    【讨论】:

      【解决方案2】:

      每个使用会话的请求都需要从内存缓存(在最佳情况下)或数据存储中获取会话数据,然后在请求结束时将会话信息写入缓存和数据存储。增加 100 毫秒的延迟似乎是一个合理的数字;显然,任何给定请求的实际延迟将取决于是否存在缓存未命中以及每个 API 调用的(高度波动;请参阅应用引擎状态页面)延迟。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 2018-12-03
        • 2017-12-12
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多