在未使用应用程序的情况下,GAE 前端实例的运行时间正在增加(python-backend)

在未使用应用程序的情况下,GAE 前端实例的运行时间正在增加(python-backend)

尽管应用程序没有被使用,也没有实例在运行(因为我手动关闭了它们!!),但我的 GAE 前端实例运行时间仍在不断增加。我的问题有几个子问题,如下所示:

  1. 影响前端实例小时数的主要组件是什么?在我当前的系统实施中,我大量使用了以下 Google 资源:Memcache、任务队列和 NDB 数据存储。我知道数据存储与前端实例没有太大关系(或者我可能错了),但 Memcache 会影响前端实例小时数吗?直到昨天,我的应用程序运行良好,并且实例小时数正在使用(正如您所期望的那样),因为任务队列正在使用。这让我相信主要因素是使用任务队列并在短时间内发送多个请求。但是今天早上我增加了一些额外的 memcache 使用量,它开始出现问题。此外,静态资源是否会影响实例小时数?

  2. 如何优化应用程序,主要考虑哪些方面?Google API 调用、一般 URL 调用,还有 memcache?

应用信息:

在我的 app.yaml 文件中,这里有一些配置信息:

  • default_expiration:15m(我之前是1h,但为了测试目的进行了更改)
  • instance_class:F2(我需要将其设为F4以进行某些处理,但为了测试目的再次将其更改为F2)
  • 线程安全:是

我需要对实例小时数有更清晰的了解,我在这里读到的帖子不够清楚!如果您对谷歌如何计算前端实例小时数有深入的了解,请告诉我!是什么原因导致它上升,如何管理它以及所有这些事情。

一些额外的视觉内容:

流程摘要

正如您在图片上看到的,没有部署任何实例(也就是说没有正在运行的实例)但账单却在上涨,并且汇总图表也变得疯狂!看看那些尖峰!

任何事都将不胜感激!

答案1

实例小时计算

正如所写实例计费,即使只收到一个请求,任何实例都将运行至少 15 分钟。这在一定程度上是为了避免许多最终用户在启动实例时遇到延迟。相反,实例将处于空闲状态并准备好立即接收请求。

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

并发和异步优化

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

同样,获取 URL 也需要很长时间。同步执行此操作可能会冻结处理程序,等待这些请求返回。如果这些请求从未返回或仅返回默认超时,则延迟会更严重。尽管urlfetch库没有内置任何异步获取功能,但许多第三方库都内置了异步获取功能,或者非常适合 Python 中的线程。在 中go,您可以在并发执行的 goroutine 中获取这些 URL。这将允许处理程序不仅继续执行其他任务,还可以并行获取这些 URL。

识别瓶颈

根据您的应用程序需求,可能有很多并发设计的机会。这可以大大减少实例的响应时间,使它们能够处理更多请求或更快地停机,这两者都会消耗更少的实例时间。我建议使用Stackdriver 跟踪研究请求的生命周期。这可能有助于识别瓶颈。有了这些信息,您应该知道应该优先优化哪些方面。

相关内容