2010-03-14 63 views
5

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

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

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

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

回答

2

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

0

2018 UPDATE

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

  1. 存储的_ah_SESSION实体成本4把,而不是2,
  2. 因为_expires属性包含单调递增的值,保持其索引带有争有一定风险,请参阅this question更多细节。

编辑:注意这里是一个有点普遍的神话,之后每个请求仅仅是为了更新到期时间戳_ah_SESSION实体自动改写。但是这是错误的。根据实际的implementation of SessionManager,仅当会话至少25%过期时才强制执行这样的重写。这显着减少了对数据存储的访问。我只是提到这一点,因为我原来也相信这个神话。 :D