7

官方appengine文檔說,如果我們在app.yaml中將threadsafe屬性設置爲true,那麼appengine將服務器併發請求。Appengine Python中的併發請求

官方鏈接: https://developers.google.com/appengine/docs/python/python27/newin27#Concurrent_Requests

  • 這是否意味着應用程序會更快(低於2.5),如果我們有線程屬性爲true?官方文檔/博客這樣說,但我正在尋找真實世界的經驗。

  • 在高層,它是如何在內部工作的?我們的應用程序是否會初始化併爲每個請求產生一個新的應用程序?

回答

10

你仍然只有一個線程每個請求 - 你不能產卵。

在線程關閉的情況下,Appengine只會將一個請求路由到一個實例。因此,如果每秒處理請求的請求次數接近1,Appengine將啓動一個新實例來處理它們。這花錢。在線程安全的情況下,Appengine可以將多個請求路由到一個實例。

這是否可以幫助你,取決於你的應用程序,你的流量:

  1. 首先,計算/每秒平均延遲入站請求。如果這是一個很好的話,線程安全不會有太大的差別。
  2. 檢查您的應用程序以瞭解它花費多少時間等待API(例如數據存儲或URL提取)。如果這是一個很大的比例,那麼線程安全將有助於保持實例的倒計時。如果沒有,它不會有多大幫助。

簡單的規則是切換線程安全,除非您的應用程序處理密集程度很高(很少有API等待)。

+0

偉大的答案!有一個問題,我覺得req/ms x ms/req〜=活動實例編號。是否有任何參考資料描述了此估算的更多細節? – lucemia

4
  1. 這並不意味着你的應用程序將變得更快,請求仍然被一個線程服務。
  2. 當應用程序是線程安全的時,每個實例現在可以派生多個線程,每個線程將服務於非線程安全的請求,其中每個實例都有一個線程爲請求提供服務。
+0

我的應用程序是線程安全的(無共享狀態),我應該產生多個線程來提高性能?有沒有可用於appengine的例子? – 18bytes

3

Python 2.5在每個請求的基礎上比Python 2.7更快。這部分是由於每個人的成熟程度。 App Engine使用不同的機制來支持它們中的每一個。 Python 2.7的勝利在於它能夠支持並行請求,而不是以Python 2.5處理負載峯值所需的速率旋轉新的實例。

「它是如何在內部工作」的問題是,你可能不會在這裏得到答案,但是過去一年的Google I/O有一些提示,說明我們做什麼和爲什麼。在youtube.com搜索「app engine」。

0

我在這裏添加一個答案,因爲我們目前的實際結果與我們所期望的相反。

經過持續的性能下降,我們嘗試將我們的(Python)應用程序切換回非線程安全模式,並且非常驚訝地發現我們的性能提高了約10倍。所以我們已經離開了。我們的GAE支持團隊無法解釋這可能是怎麼回事。上一次我們介紹,我們相當於I/O綁定到數據存儲,理論上應該從多線程中獲得很大的提升。

所以從我們的經驗來看......不但不會認爲線程安全會更快,而且速度會更慢。如果有人知道這可能是什麼,請分享。