防止 Google App Engine Cron 作业创建多个实例(从而耗尽我所有的实例时间)

2024-02-09

与这个问题非常相关(如何防止我的 Google App Engine cron 作业耗尽我的所有实例时间? https://stackoverflow.com/questions/8670532/how-can-i-prevent-my-google-app-engine-cron-jobs-from-burning-through-all-my-ins?answertab=votes#tab-top),但不幸的是,我不仅经历了类似的事情,在 Appengine 中的 Cron 作业中创建了多个实例,这导致需要对大量实例小时进行计费。

我尝试了不同的时间间隔来确定这是否对实例小时数有影响,但目前无法确定差异。为了说明这一点,我收到了以下三个 cron 作业的 App Engine 前端实例费用:263.462 小时(仅 10 天!):

cron:
- description: Push a weather "tick" onto pubsub every 5 minutes
  url: /publish/weather-tick
  schedule: every 5 minutes

- description: Push a crypto "tick" onto pubsub every 5 minutes
  url: /publish/crypto-tick
  schedule: every 5 minutes

- description: Push a astronomy "tick" onto pubsub every 6 hours starting at 00:00
  url: /publish/astronomy-tick
  schedule: every 6 hours synchronized

当我将其更改为每分钟一个 cron 作业时:

cron:
- description: Push a "tick" onto pubsub every 1 minutes
  url: /publish/minute-tick
  schedule: every 1 minutes

I currently still get multiple instances, see: Instance Hours change over time Strangely enough, the instance went from 2 --> 3 upon changing to just one cron-job every minute.

我也很难理解为什么有 3 个实例“已创建”,而 0 个实例“正在运行”,而账单估算为 1。

与 Google 的联系可能会告诉我实例数量较多(这导致了实例小时数较多),并且我的参数设置为“自动缩放”,这允许这样做。但是,将其更改为手动会限制免费实例小时数(从 28 小时到我认为是 9 小时)。

我的情况

我正在运行 cron-jobs 来调用 Pub/Sub 事件。我有 Google Cloud 函数来监听 Pub/Sub 事件,以便我可以根据这些刻度执行数据库更新。这是继上提供的教程之后。我理解一个实例按 15 分钟计费,尽管它的生命周期较短,但我无法理解如果只执行这么小的任务,如何或为何创建多个实例。我特别感兴趣,正如相关问题(如何防止我的 Google App Engine cron 作业耗尽我的所有实例时间? https://stackoverflow.com/questions/8670532/how-can-i-prevent-my-google-app-engine-cron-jobs-from-burning-through-all-my-ins?answertab=votes#tab-top),那个人正在经历 24 小时,但预计只有一个实例。为什么我得到3?我觉得我缺少对这个过程的一些概念性理解,以及相应调整的工具。任何帮助或指示将非常受欢迎!


另一件需要考虑的事情是,拥有多个具有相同或重叠计划的 cron 作业意味着您的应用程序将大致接收多个请求同时- 活动高峰。

动态调度程序可能会根据扩展配置和应用程序的响应时间,决定需要生成额外的实例来处理此类流量峰值。您可以尝试调整缩放配置来防止这种情况,请参阅Google App Engine 标准环境的 max_num_instances https://stackoverflow.com/questions/48380505/max-num-instances-for-google-app-engine-standard-environment/48387012#48387012

避免这种情况的另一种方法是错开您的请求以稍微平滑流量模式:

  • 对重叠的计划使用单个 cron 条目,并在其处理程序内部为您要运行的每个作业发出单独的请求,可能会在时间上稍微错开。例如,使用延迟推送队列任务,请参阅谷歌应用程序引擎拉队列是否按 FIFO 顺序返回任务? https://stackoverflow.com/questions/40475174/do-google-app-engine-pull-queues-return-tasks-in-fifo-order/40478036#40478036

  • 使用明确的 cron 计划时间来最大程度地减少重叠,例如在第 1、6、11 分钟等安排一个,在第 2、7、12 分钟等安排另一个。不过,可能的组合数量有限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 Google App Engine Cron 作业创建多个实例(从而耗尽我所有的实例时间) 的相关文章

随机推荐