2016-12-06 72 views
3

我有一個Python App Engine應用程序,它每天提供約3M的請求。我正試圖優化應用程序以節省我可笑的氣球託管賬單。Python App Engine webapp2路由速度慢

November, App Engine Frontend Instances: 12924.391 Hours, $604.22 

我的請求處理到一些memcached的電話,但現在我已經注意到,它通常需要大約20毫秒,只要有時166毫秒webapp2的前甚至將請求傳遞給我。

在下面的圖片中,您可以看到顯示「後」在166ms發生的跟蹤。

enter image description here

下面是這個服務的代碼。

import logging 
logging.info("main.py logging imported") 
from imports import * 
from handlers import * 
logging.info("completed importing others") 

class Main(webapp.RequestHandler): 
    def post(self): 
     logging.info("Post") 
     self.get() 


... 

app = webapp.WSGIApplication(
    [ 
    ('/.*', Main) 
    ], 
    debug=False 
) 

我試過了什麼?

我有線程安全啓用,所以任何進口不應該發生在請求服務之前。可以肯定的是,我還添加了日誌記錄以查看導入的時間,以及您可以看到他們沒有完成每個請求。

更多信息

這不是重要的是,延遲低,除了節省託管費用。即使使用1分鐘響應時間(請求是API webhook),我也可以,只要它不計入前端實例時間即可!

如果它是相關的,這是我的app.yaml的開始。

application: coolestsports-hrd 
version: 1 
runtime: python27 
threadsafe: yes 
api_version: 1 
automatic_scaling: 
    min_idle_instances: 1 
    min_pending_latency: 1000ms 
+1

我不確定你的網址方案是什麼樣子,但如果可能的話,它可能有助於從匹配的網址中刪除通配符字符 –

+0

@BRadC我爲app.yaml頂部的url添加了直接路由,在通配符之前的WSGIApplication中也是如此,但看起來並不一樣(每個請求仍然需要20+毫秒)。 – Bemmu

+0

我不知道「前端實例」時間是否包含TCP套接字建立成本(包括往返)?這可能可以解釋這 – Bemmu

回答

2

如果保持實例小時標籤低是高利率,保持請求延遲低,那麼也許你可以有利於基本比例的下降自動縮放。從Scaling types and instance classes

基本變

當應用程序接收到一個請求基本縮放服務將創建一個實例。當該應用變爲空閒時,該實例將被拒絕。基本縮放對於間歇性或由用戶活動驅動的工作來說是理想的。

自動縮放

自動縮放是基於請求速率,反應潛伏期,以及其他應用的指標。

自動縮放可實現更好的用戶體驗,並可根據傳入流量模式啓動大量實例。

config parameters,您可以使用它來調整縮放行爲,但對於自動縮放從根本上沒有一個限制實例並行運行的數量,這可能導致balooning實例小時。順便說一句,你的min_idle_instances: 1幾乎總是保持活躍狀態​​,幾乎總是空閒的(其他實例將實際處理大部分請求)。

,另一方面基本縮放有max_instances配置可以用來有效地蓋住該法案的實例時間:

max_instances

必需。 App Engine爲此服務版本創建 的最大實例數。這對於限制 服務的成本很有用。

+0

謝謝,我切換到基本縮放,看看這可能會使它更便宜。 – Bemmu

+0

查看靈活的env https://cloud.google.com/appengine/docs/the-appengine-environments其帳單基於vCPU,內存和永久磁盤的使用情況,而不是實例小時數 – glmvrml