【问题标题】:Is there a way to implement long-running transactions in App Engine?有没有办法在 App Engine 中实现长时间运行的事务?
【发布时间】:2012-09-23 21:30:03
【问题描述】:

我有一个函数可以发出许多 HTTP 请求来收集数据并将其存储在数据存储中。所有调用都必须成功,否则一切都必须回滚。执行时间接近 10 分钟。应用引擎上的最大交易截止日期似乎是默认的 60 秒。

有没有办法增加这一点,从而使函数具有事务性?

【问题讨论】:

    标签: python google-app-engine transactions google-cloud-datastore long-running-processes


    【解决方案1】:

    看来这是不可能的。来自文档:

    在因错误而中止之前等待 Datastore 返回结果的最长时间(以秒为单位)。接受整数或浮点值。 不能设置高于默认值(60 秒),但可以向下调整以确保特定操作快速失败(例如,要更快地向用户返回响应,重试操作,尝试不同的操作,或将操作添加到任务队列)。

    https://developers.google.com/appengine/docs/python/datastore/functions#create_transaction_options

    但是,当且仅当事务成功完成时,您可以触发任务(如果有任何用处)。

    https://developers.google.com/appengine/docs/python/datastore/transactions#Transactional_Task_Enqueuing

    您可以将任务作为数据存储区事务的一部分加入队列,这样只有在事务成功提交的情况下,该任务才会加入队列并保证加入队列。如果事务未提交,则保证不会将任务排入队列。如果事务确实被提交,则保证任务入队。

    【讨论】:

      【解决方案2】:

      在前端实例中没有。

      您需要为此旋转一个后端实例: https://developers.google.com/appengine/docs/python/backends/overview

      【讨论】:

        【解决方案3】:

        对于 10 分钟的请求,您需要使用后端

        Backends (Python)

        本参考介绍了如何在 Python 中使用 App Engine 后端。后端是特殊的 App Engine 实例,它们没有请求期限、更高的内存和 CPU 限制以及跨请求的持久状态。它们由 App Engine 自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一 URL,您可以跨多个实例对请求进行负载平衡。

        后端可以处理来自用户或应用程序其他部分的 HTTP 请求,在后台连续启动和运行,或者由任务队列任务或 Cron 作业驱动。上面的链接介绍了如何配置后端、使用它们的最佳做法以及 App Engine 如何为它们计费。

        【讨论】:

        • 后端没有提及交易,所以我认为这无论如何都行不通?
        • 获取数据需要 10 分钟,对吧?难道你不能在后端获取数据,然后一旦你知道所有调用都成功了,就将数据存储在事务中吗?我不是建议后端可以扩展交易限制。我建议在您尝试交易之前在后端准备好数据。
        猜你喜欢
        • 2019-01-17
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 2020-05-15
        • 2017-01-15
        • 1970-01-01
        • 2016-03-25
        • 2020-07-01
        相关资源
        最近更新 更多