2016-12-06 50 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