此处有一些背景信息:目前,我们正在使用Google Cloud Datastore在我们的应用程序中存储多种不同类型的记录,并且我们正在使用Google Cloud Functions从各种类型的类型中返回所有记录。我们通过HTTP请求执行此操作,因此这是一个HTTP触发器。就在昨晚,我们遇到了一个问题,当我们所有field
类记录的总大小太大时,我们的终端突然失败了"错误:无法处理请求"。
我们的包装器非常简单:我们的端点接受类型作为路径参数,运行带有过滤器的数据存储区查询,用于所有类型的记录,然后使用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);
)
答案 0 :(得分:2)
HTTP触发器的传入和传出有效负载的限制当前设置为10MB,为documented here。
答案 1 :(得分:1)
您可以将工作负载切换到可以接受 32 MB 请求负载的云运行。