2010-03-14 64 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