在Google App Engine上启用会话的性能如何?

时间:2010-03-14 00:17:12

标签: java google-app-engine session

在Google App Engine上启用会话的性能如何?

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

我有什么办法可以加快速度吗?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

2018更新

我知道这个问题有点陈旧,但我认为值得一提的是,GAE会议的表现目前更差。这是因为_expires的{​​{1}}属性现在正在编入索引。在查询过期的会话时,拥有此索引肯定会派上用场。但这有一个缺点:

  1. 存储_ah_SESSION实体需要4次写入,而不是2次,
  2. 由于_ah_SESSION属性包含单调递增的值,因此维护其索引会带来一定的争用风险,有关详细信息,请参阅this question
  3. 编辑:请注意,在每次请求仅更新到期时间戳后,_expires个实体会自动重写,这是一种普遍的说法。但是这是错误的。根据实际implementation of SessionManager,仅当会话至少25%到期时才会强制执行此类重写。这显着减少了对数据存储的访问。我只是提到这一点,因为我原本也相信这个神话。 :d