2016-01-06 17 views
3

我們正面臨着奇怪的問題在我們的應用程序,在這裏我們得到了錯誤的周之間可以在變化: -什麼決定啓動動態實例的時間,如果代碼是相同

請求已等待太久後中止嘗試爲您的請求提供服務。

早些時候,我們能夠以相同數量的空閒實例進行擴展,但現在我們不是,我們也沒有改變任何可能影響啓動時間的代碼明智。但現在我們正在接收超時。

+0

您無法控制在appengine中運行您的應用的位置/內容。有時候一個實例可能在一個重負載的虛擬機上。你應該看看系統停機/故障率,也要看你的應用程序在一段啓動時間,以獲取一個實例需要多長時間在正常條件下,開始的感覺。如果這通常需要超過10-15秒,然後如果有減速很可能會遭到襲擊。 –

回答

2

使用python可以顯着提高實例啓動時間,具體取決於您的應用程序的代碼組織。

延遲加載的請求處理程序代碼只會在實例啓動時加載包含實際請求的處理程序的python文件,以觸發實例啓動,而不是整個應用程序代碼。處理程序代碼可以從模塊的.yaml中提到的模塊主文件中分離出來。儘可能多的文件,甚至每個文件的單個處理程序。

例如,在一個特定模塊的module_blah.py文件,你可以有這樣的事情只加載相應file1.py,​​或rare.py文件除了module_blah.py文件(這是基於模塊的.yaml文件加載)和僅如果/當相應的路徑要求:

app = webapp2.WSGIApplication([ 
    ('/path1', 'file1.HandlerOne'),  # loads file1.py 
    ('/path2', 'file2.HandlerTwo'),  # loads file2.py 
    ('/pathX', 'rare.RareHandlerOne'), # loads rare.py 
    ('/pathY', 'rare.RareHandlerTwo'), # loads rare.py 
    ('/.*', ModuleBlahHandlerX)   # already loaded module_blah.py 
], debug=True, config=apart_config) 

您也可以使用這些地方的方法裏面較重/第三方庫的必要的import語句而不是在文件的頂部,同時也裝入這些文件只有在尊重方法被調用。

的缺點在於響應時間爲一些請求可能偶爾會看到一些峯 - 當相應代碼被加載,點播,在處理這些請求的實例。由於代碼已經加載,因此由相同實例處理的後續請求將更快。

我猜想SDK或GAE的操作條件(總體負載平衡活動,由於維護,中斷等導致的更短或更長的瞬變)在某些時間發生變化可能會導致實例啓動時間的變化,如果您的實例的啓動時間足夠接近所允許的最大值,可能會導致您描述的症狀。我描述的技術可以幫助您的應用程序遠離最大值,從而降低出現問題的機率。

最後,配置功能更強大instance class也將加速比相同的應用程序代碼的實例啓動時間。

相關問題