【发布时间】:2021-05-14 13:47:12
【问题描述】:
我们使用 Firebase 函数和几个不同的 HTTP 函数。
其中一项功能通过我们网站上的手动触发器运行。然后它从外部资源中提取大量数据并将其保存到我们的 Firestore 数据库中。我们的函数资源是 Node.js 10、1 GB 内存和超时前 540 秒。
但是,当我们有需要提取的大型数据集时,例如5 000 - 10 000 条记录要写入数据库,我们开始遇到问题。我们在以下大型数据集上收到错误:
8 RESOURCE_EXHAUSTED: Bandwidth exhausted
Firebase Functions Health Dashboard 日志中的完整错误如下所示:
Error: 8 RESOURCE_EXHAUSTED: Bandwidth exhausted
at Object.callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:176:52)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:342:141)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181)
at Http2CallStream.outputStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:117:74)
at Http2CallStream.maybeOutputStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:156:22)
at Http2CallStream.endCall (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:142:18)
at ClientHttp2Stream.stream.on (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:420:22)
at ClientHttp2Stream.emit (events.js:198:13)
at ClientHttp2Stream.EventEmitter.emit (domain.js:466:23)
我们的 Firebase 项目正在启动计划中,并且还在连接到有效结算帐户的 GCP 上。
在 GCP 上进行检查后,我们似乎没有超出我们的每分钟 WRITES 报价,正如之前所认为的那样,但是,我们超出了我们的 Cloud Build 限制。当我们从函数内将数据保存到 firestore 时,我们也在使用批量写入,这似乎也减少了 db 写入量。例如
我们不使用 Cloud Build,所以我假设 Firebase Functions 在后端使用 Cloud Build 来运行这些函数或其他东西,但我找不到任何关于此事的文档。我们还有一些在创建文档时运行的 firestore 数据库函数。不确定这是否在后端使用 Cloud build。
知道为什么会发生这种情况吗?每当发生这种情况时,我们的函数就会因该错误而终止,这导致我们只导入一半的数据。数据导入可以完美地处理少量数据。
在此处查看我们对这个特定项目的使用情况:
【问题讨论】:
标签: firebase google-cloud-platform google-cloud-functions