配额和限制

此页面详细介绍了 Cloud Functions 支持扩容且基于用量的限制。这些限制由 Blaze 随用随付定价方案规定,适用于将函数部署到 Node.js 10 运行时环境的 Firebase 项目。

Blaze 方案免费提供宽裕的调用次数、计算时间和互联网流量额度。但是,部署函数时,系统会对用于函数容器的存储空间收取少量费用。如需了解详情,请参阅 Firebase 常见问题解答

Firebase 的配额包含四种类型:

  • 资源限制

    这些限制会影响您的函数可以使用的资源总量。

  • 时间限制

    这些限制会影响函数可以运行的时长。

  • 速率限制

    这些限制会影响您调用 Firebase API 来管理函数的速率。

  • 网络限制

    这些设置会影响出站连接和实例限制。

下面将更详细地介绍各种不同类型的限制,并指明了 Firebase(第 1 代)和 Firebase(第 2 代)限制之间的差异(如适用)。

资源限制

这些资源限制会影响您的函数可以使用的资源总量。区域范围以项目为单位,每个项目都有自己的限额。

配额 说明 限制(第 1 代) 限制(第 2 代) 能否增加? 范围
函数的数量 每个区域可以部署的函数总数 1000 1,000 减去已部署的 Cloud Run 服务数量 每个区域
部署大小上限 单个函数部署的大小上限 源文件为 100 MB(压缩后)。
源文件和模块一共 500 MB(未压缩)。
不适用 每个函数
未压缩 HTTP 请求的大小上限 在一个 HTTP 请求中发送到 HTTP 函数的数据量 10 MB 32 MB 每次调用
未压缩 HTTP 响应的大小上限 在一个 HTTP 响应中从 HTTP 函数发送的数据量 10 MB 流式响应为 10 MB。
非流式响应为 32 MB。
每次调用
事件驱动函数的事件大小上限 在事件中发送到后台函数的数据量 10 MB Eventarc 事件为 512 KB。
旧版事件为 10 MB。
每个事件
函数内存的大小上限 每个函数实例可以使用的内存量 8 GiB 32GiB 每个函数
项目内存上限 项目可以使用的内存量(以字节为单位)。它按 1 分钟内各个函数实例中用户请求的内存总和来衡量。 取决于所选区域。此限制在高容量区域可能较高,在最近打开的区域可能较低。 不适用 每个项目和区域
项目 CPU 上限 项目可以使用的 CPU 量(以毫微 vCPU 为单位)。它按 1 分钟内各个函数实例中用户请求的 CPU 总和来衡量。 取决于所选区域。此限制在高容量区域可能较高,在最近打开的区域可能较低。 不适用 每个项目和区域

时间限制

配额 说明 限制(第 1 代) 限制(第 2 代) 能否增加? 范围
函数运行时长上限 函数在被强制终止之前可以运行的最长时间 540 秒 HTTP 函数为 60 分钟。
事件驱动型函数为 9 分钟。
每次调用

速率限制

配额 说明 限制(第 1 代) 限制(第 2 代) 能否增加? 范围
API 调用次数(读取) 通过 Firebase API 描述或列出函数的调用次数 每 100 秒 5,000 次 每 60 秒 1200 次 仅第 1 代可增加 按项目(第 1 代)
按区域(第 2 代)
API 调用次数 (WRITE) 通过 Firebase API 部署或删除函数的调用次数 每 100 秒 80 次 每 60 秒 60 次 1 按项目(第 1 代)
按区域(第 2 代)
API 调用次数 (CALL) 对“CALL” API 的调用次数 每 100 秒 16 次 不适用 2 每个项目

网络限制

如需了解 Firebase(第 2 代)网络请求和带宽限制,请参阅网络限制

以下网络限制适用于 Firebase(第 1 代):

  • 每个实例每秒的出站连接数:500(无法增加)
  • 每个实例每秒的出站 DNS 解析次数:100(无法增加)

可伸缩性

通过 HTTP 调用的 Firebase 函数可以快速扩容以处理传入流量,而后台函数的扩容速度则要慢一些。函数的扩容能力取决于多种因素,包括:

  • 函数执行完毕所需的时间(短期运行的函数通常可以扩容以处理更多的并发请求)。
  • 函数在冷启动时初始化所用的时间。
  • 函数的错误率。
  • 暂时性因素,例如区域负载和数据中心容量。

后台函数有如下所述的额外限制。这些限制不适用于第 1 代 HTTP 函数

后台函数的额外配额

配额 说明 限制 能否增加? 范围 产品版本
并发调用次数上限 单个函数的最大并发调用次数
示例:如果处理每个事件需要 100 秒,则平均每秒的调用率将限制为 30 次
3000 每个函数 仅限第 1 代函数
调用速率上限 单个函数处理事件的最大速率
示例:如果处理一个事件需要 100 毫秒,即使仅平均并行处理 100 个请求,调用速率也将被限制为每秒 1,000 次
每秒 1,000 次 每个函数 仅限第 1 代函数
并发事件数据大小上限 单个函数并发调用的传入事件的大小上限
示例:如果事件的大小为 1 MB,处理它们需要 10 秒,则平均速率为每秒 1 个事件,因为在前 10 个事件中的某一个完成处理之前,不会处理第 11 个事件
10 MB 每个函数 第 1 代和第 2 代
传入事件吞吐量上限 单个函数的传入事件的最大吞吐量
示例:如果事件的大小为 1 MB,即使函数在 100 毫秒内完成,调用速率最高也只能是每秒 10 次
每秒 10 MB 每个函数 第 1 代和第 2 代

达到配额限制时

当某个函数用完分配的某种资源的所有配额后,该资源将不再可用,直到相应配额刷新或增加。这可能意味着,在此期间,您的函数和同一项目中的所有其他函数都将无法工作。当函数使用的资源中有某项资源超过配额后,该函数将返回一个 HTTP 500 错误代码且无法执行。

如需将配额增加到超出此处所列默认值的水平,请前往 Firebase 配额页面,选择要修改的配额,然后点击修改配额,在出现提示时提供您的用户信息,并为您选择的每项配额输入新的配额限制。

Firebase CLI 部署的配额限制

对于 Firebase CLI 部署的每个函数,会涉及以下类型的速率和时间限制:

  • API 调用(读取)- 每个部署调用 1 次,无论有多少个函数
    • 限制:每 100 秒 5,000 次
  • API 调用(写入)- 每个函数调用 1 次
    • 限制:每 100 秒 80 次

另请参阅 Firebase CLI 参考文档