gpt4 book ai didi

google-cloud-platform - 如何使用 Google Cloud PubSub 和 Run 处理资源密集型长时间运行的任务?

转载 作者:行者123 更新时间:2023-12-03 16:03:40 27 4
gpt4 key购买 nike

我有一个 Google Cloud PubSub 主题,有时有数千条消息,有时有零条消息。这些消息代表每个可能需要一个小时以上的任务。最好我能够为此使用 Cloud Run,因为它可以很好地满足需求,如果发布一千条消息,我希望启动 100 个 Cloud Run 实例。这些 Run 实例通过推送订阅启动。问题是 PubSub 有 600 秒的确认超时。这意味着为了让 Cloud Run 处理这些消息,它们必须在 600 秒内完成。如果他们不这样做,PubSub 会超时,然后再次发送,导致任务重新启动,直到第一个任务最终确认它(这会导致同一任务运行多次)。 Cloud Run 通过返回 2** HTTP 状态代码来确认消息。该文件指出

When an application running on Cloud Run finishes handling a request, the container instance's access to CPU will be disabled or severely limited. Therefore, you should not start background threads or routines that run outside the scope of the request handlers.



那么是否有可能通过代码确认 PubSub 请求并继续处理,而无需 Google Cloud Run 交出资源?还是有更好的解决方案我不知道?

因为这些过程非常耗费代码/资源,所以我觉得 Cloud Functions 是不够的。我看过 https://cloud.google.com/solutions/using-cloud-pub-sub-long-running-taskshttps://cloud.google.com/blog/products/gcp/how-google-cloud-pubsub-supports-long-running-workloads .但是这些并没有回答我的问题。
我看过 Google Cloud Tasks,这可能是什么?但是项目的其余部分是围绕 PubSub/Run/Functions 构建的,所以我最好坚持下去。

这个项目是用 Python 编写的。
所以最好我想像这样编写我的 Google Cloud Run 任务:

@app.route('/', methods=['POST'])
def index():
"""Endpoint for Google Cloud PubSub messages"""
pubsub_message = request.get_json()
logger.info(f'Received PubSub pubsub_message {pubsub_message}')
if message_incorrect(pubsub_message):
return "Invalid request", 400 #use normal NACK handling
# acknowledge message here without returning

# ...
# Do actual processing of the task here
# ...

那么我该如何或应该如何解决这个问题,以便资源密集型任务能够按需适当扩展(因此推送 PubSub 订阅)。并且任务只执行一次。

答案 :
简而言之,已经回答了什么。 Cloud Run 和 Functions 只是不适合这个问题。没有办法让他们分别完成超过 9 分钟或 15 分钟的任务。唯一的解决方案是切换到另一个 Google 服务并使用拉式订阅并失去 GC 运行/功能的自动缩放

最佳答案

Cloud Functions 和 Cloud Run 都不足以进行任意长时间运行的操作。 Cloud Functions 有一个 hard cap of 9 minutes per invocation , 和云运行 caps at 60 .如果您需要更多时间,您将不得不将工作委派给另一个产品,例如 Google Compute Engine。应该可以从其中一种无服务器产品中启动一些 Compute Engine 工作。
给出 pubsub 确认的限制,您可能必须找到一种方法让客户端能够轮询或收听某些资源以找出工作实际完成的时间。您可以为此使用数据库,而 Cloud Firestore 可让您收听文档以了解它们何时发生变化。因此,您可以使用它来跟踪您长期运行的工作的状态。

关于google-cloud-platform - 如何使用 Google Cloud PubSub 和 Run 处理资源密集型长时间运行的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57365044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com