【问题标题】:"Error: could not handle the request" when sending too large a response with Google Cloud Functions使用 Google Cloud Functions 发送过大响应时出现“错误:无法处理请求”
【发布时间】:2018-05-03 15:59:20
【问题描述】:

这里有一点上下文:目前,我们正在使用 Google Cloud Datastore 在我们的应用程序中存储许多不同类型的记录,并且我们正在使用 Google Cloud Functions 来返回来自各个类型的所有记录。我们通过 HTTP 请求执行此操作,因此这是一个 HTTP 触发器。就在昨晚,我们遇到了一个问题,当我们所有field kind 记录的总大小太大时,我们的端点突然失败,并显示“错误:无法处理请求”。

我们的包装器相当简单:我们的端点接受种类的类型作为路径参数,运行带有过滤器的数据存储查询,然后使用res.send 发送查询的结果.

起初,这似乎是事务大小超出谷歌提供的限制的问题。但是,当我添加更多日志记录时,我确定该查询确实正确地找到了所有字段记录而没有发生意外;但是,无论出于何种原因,它在res.status(200).send(resultsArr); 的最后一步中断了。

这似乎与被发回的响应的大小有关,因为降低所有实体的总大小是成功的。此时我唯一能想到的是res.send 不会发回这种大小的响应,但是在谷歌搜索时我找不到任何关于这些限制的信息。

有没有人遇到过这样的事情?有谁知道对此有什么好的预期解决方案?我知道我们可以对端点进行多次调用,但有限制,但我担心这根本是个问题。遇到查询大小的限制是一回事,但我没想到res.send 本身会限制我们。

(已编辑:是的,响应超过 10MB。如果您需要帮助确定这是否是您的问题,您可以使用以下内容进行验证:

let size = Buffer.from(JSON.stringify(resultsArr)).length; console.log('Attempting to send response of size:', size);)

【问题讨论】:

    标签: google-cloud-datastore google-cloud-functions


    【解决方案1】:

    HTTP 触发器的传入和传出负载限制当前设置为 10MB,如 documented here

    【讨论】:

      【解决方案2】:

      您可以将工作负载切换到可以接受 32 MB 请求负载的云运行。

      【讨论】:

      • 你是怎么做到的?
      【解决方案3】:

      2022 - 第 2 代云功能现在支持高达 32MB 的请求。 https://cloud.google.com/functions/quotas#resource_limits

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 2021-06-18
        • 2019-06-09
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多