GAE前端实例小时数正在增加,但未使用该应用程序(python-backend)

我的GAE前端实例小时数不断增加,即使应用程序没有被使用,也没有实例在运行(因为我手动closures了它们!)。 我的问题有几个子问题,它们是:

  1. 什么是影响前端工作时间的主要组成部分? 在我目前的系统实现中,我广泛使用了以下Google资源:Memcache,任务队列和NDB数据存储。 我知道数据存储与前端实例没有多大关系(或者我错了),但Memcache是​​否会造成前端实例小时? 直到昨天,我的应用程序运行得非常好,正在使用实例小时(正如您所期望的),因为正在使用任务队列。 这使我相信主要的原因是在短时间内使用任务队列并发送多个请求。 但今天早上我添加了一些额外的内存缓冲区的使用,它开始行动了。 另外,静态资源是否会影响实例的时间?

  2. 如何优化应用程序,主要考虑什么? Google API调用,一般的URL调用,还有memcache?

应用信息:

在我的app.yaml文件中有一些configuration信息:

  • default_expiration:15米(我有1小时前,但为了testing目的而改变)
  • instance_class:F2(我需要将它作为F4进行一些处理,但是为了testing目的将它再次改为F2)
  • 线程安全:是的

我需要对实例小时有一些清楚的了解,我在这里阅读的post还不够清楚! 如果您对Google如何计算前端实例小时有深入的了解,请让我知道! 是什么导致它上升,如何pipe理它和所有这些东西。

一些额外的视觉背景:

进程摘要

正如你所看到的那样,没有实例部署(AKA没有实例在运行),但计费正在上升,他们的汇总图表只是疯了!看看所有的尖峰!

任何事情将不胜感激!

实例小时计算

如实例帐单中所写,即使收到单个请求,任何实例也将运行至less15分钟。 这部分是为了避免让许多最终用户体验旋转实例的延迟。 相反,实例将处于空闲状态并准备立即接收请求。

至于如何计算实例时间,这是基于实际操作时间。 如果一个F1实例运行了2.5个小时,它将消耗大约2.5个实例小时。 实例小时数乘以App Engine定价 重要说明中logging的类号。 因此,运行2小时的F2实例将消耗4个实例小时。

优化并发性和asynchronous性

说到优化,最好的办法是在适当的时候委派,而不是浪费时间。 例如,假设您的处理程序需要从数据存储获取3个包含URL的实体,然后为这些JSON数据获取这些URL。 从数据存储获取实体需要一些时间。 如果使用get调用的同步版本,则在获取实体时,处理程序基本上被阻塞。 使用相同API调用的asynchronousget_async版本将允许处理程序在检索实体的同时继续执行其他任务。

同样,提取URL可能需要很长时间。 这样做同步可能冻结你的处理程序,而它等待那些返回。 如果这些请求永远不会返回,或者只是以默认的超时返回,则延迟会更糟。 虽然urlfetch库没有任何内置的asynchronous读取,但是许多第三方库可以很好地利用python进行线程化。 在go ,您可以在并发执行的goroutine中获取这些URL。 这将使处理程序不仅可以继续执行其他任务,还可以并行获取这些URL。

识别瓶颈

根据您的应用需求,可能有很多并发devise的机会。 这可以大大减less您的实例响应时间,使他们能够处理更多的请求或更快地停飞,这两者都将消耗更less的实例小时。 我会build议使用Stackdriver Trace来研究请求的使用寿命。 这可能有助于确定瓶颈。 有了这些信息,您应该知道在哪里优化优化。