如何解决CloudTasks 不扩展 GAE 后端实例
我正在寻找一种解决方案,它可以让我运行长达 24 小时的任务。 Cloud Tasks 和多个 AppEngine 后端实例的组合似乎是一种完美的方式。
由于任务需要长时间运行,我希望尽可能快地扩展到 max_instances。但我很难做到这一点。
这是我的app.yaml
service: slow
runtime: python37
# --timeout=90000 (25h) -> AppEngine Backend Instance should raise TimeoutExceededError after 24h
entrypoint: gunicorn main:app --workers 1 --timeout=90000
instance_class: B2
basic_scaling:
max_instances: 15
这是我的 Cloud Task Queue 配置的 printscreen。
我的问题是 Cloud Task Queue 中的任务没有像我预期的那样产生新实例(例如,队列设置中的 15 个 max_concurrent_tasks 应该产生 15 个后端实例)。 我通过在队列配置中积极增加 max_concurrent_tasks 以某种方式设法克服了这个问题(200 个 max_concurrent_tasks 将产生 15 个后端实例)。 不幸的是,随着队列中任务数量的减少,后端实例将开始终止。
现在,队列中剩下 8 个任务(数百个),只有 1 个后端实例,它只运行 1 个任务。即使单击 CloudTask Web UI 中的“运行任务”按钮,我也无法触发启动其他实例。
你们中有人遇到过类似的问题吗? 你有什么提示为什么会发生这种情况吗? 为什么云任务没有命中 /_ah/start 端点以启动一个新实例来运行?
解决方法
我不确定基本缩放是否是个好主意。根据{{3}}:
如果您使用基本缩放,App Engine 会尝试降低成本, 即使这可能会导致更高的延迟,因为 传入请求增加
似乎自动缩放会是更好的主意。如果您查看同一个文档,您会发现:
如果您使用自动缩放,您应用中的每个实例都有自己的 传入请求的队列。在队列变得足够长之前 对您应用的延迟有显着影响,App Engine 自动创建一个或多个新实例来处理 增加负荷。
您可以配置自动缩放的设置以实现 在您想要的性能和可能产生的成本之间进行权衡。
文档中提到了 3 个可以使用的设置:
- 目标 CPU 利用率
- 目标吞吐量利用率
- 最大并发请求数
我认为您应该能够找到最适合这 3 个的配置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。