光环标志
光环基地文档
文档›Edge Functions›How an invocation works

调用如何工作

演练一次调用,解释限制、错误代码和您观察到的时间。

8分钟 读取·级别 先进的·修改于 2026年10月12日
该英文文本是根据法文原文自动生成的,尚未经过审查。
该页面已自动翻译。英文版具有权威性。
#
路径

1. 调用路径

一次调用text
your code ── invoke('hello') ──▶ gateway (data plane)
                                   • checks the key and the user's token
                                   • finds the project from the host
                                   • adds x-aura-role, x-aura-user-id, x-aura-project-id
                                   │  message bus (request / reply)
                                   ▼
                           functions service
                                   • access policy: only invoke is public
                                   • reads the function, reserves one invocation of the plan quota
                                   │  HTTP
                                   ▼
                            edge runtime
                                   • loads code, limits and variables
                                   • starts an isolated V8 worker
                                   • rebuilds the request you described
                                   ▼
                             your function ── Response ──▶ back along the same path

网关和功能服务通过消息总线进行通信。该总线上的消息有大小限制,这就是为什么超过约 256 KiB 的请求或响应不会通过:请参阅 限制。

#
运行时

2.运行时内部

  • 每次调用一名工作人员。 边缘运行时为每次调用启动一个新的隔离 V8 工作线程,并具有内存限制和函数超时。从一次调用到下一次调用,内存中的任何内容都不会保留:不要将状态保留在变量中。使用您的数据库或存储。
  • 代码被缓存几秒钟。 运行时将代码和函数的限制保留 5 秒,并在部署时将其删除。每次调用时都会读取变量。
  • 您的请求已重建。 运行时创建您描述的请求(method、 path、 headers、 body)并将其交给您的 Deno.serve 处理程序。因此,函数的行为就像任何 HTTP 服务器一样。
  • 运行时强制超时。 当 timeout_secs 过去后,取消该worker;调用者在大约该延迟后看到错误。
  • WASM 函数 在服务本身内部运行,对内存、时间和指令有限制。 WASM 函数可以报告日志行,这些日志行出现在响应的 logs 字段中; Deno 函数不能。
#
回应

3. 包络和raw模式

该服务有两种返回函数答案的方法,由 X-Aurabase-Invoke-Mode 请求标头选择。

信封(默认)原始(raw)
HTTP状态始终200函数自身的状态
身体{ data: { status, headers, body, logs, duration_ms }, meta }函数的字节数
内容JSON 或 UTF-8 文本任何东西,包括二进制
使用者responseType: 'json',工作室'text'、 'blob'、 'arrayBuffer'、直接 HTTP

信封的存在使得一个 JSON 响应可以携带呼叫的状态、标头和持续时间。它的限制是字节不能在 JSON 中传输:这就是二进制响应需要原始模式的原因。 SDK 从 responseType选择模式。

在原始模式下,服务将 x-aurabase-invoke-origin: function 添加到函数的答案中。来自网关或运行时的错误不携带它。这就是 SDK 将 FunctionsHttpError(您的函数已回答)与 FunctionsRelayError(平台失败)分开的方式。

#
时间

4. 时间、计量和故障

三个超时是嵌套的,因此没有一个超时会在其中的超时之前结束:

超时,从外到内text
gateway 380 s  ⊃  message bus 370 s  ⊃  function timeout_secs (≤ 300 s) + margin

该服务等待 timeout_secs 的运行时间加上一个裕度。由于运行时取消了 timeout_secs处的工作程序,因此您通常会在此时看到函数中的错误,并且仅当运行时本身停止应答时才会看到 504 TIMEOUT 。因此,504 意味着函数 已在 中启动,并且可能会产生影响:不要盲目地重复非幂等调用。

计量与配额:

  1. 在调用之前,该服务会从计划配额中保留一次调用。如果配额用完,调用将在此处停止并显示 403。
  2. 调用后,它会记录调用及其持续时间(以毫秒为单位)。
  3. 如果在您的函数应答之前调用失败,则保留将被释放并且不会被计算在内。
#
后果

5. 您的代码如下

  • 保持每个调用简短且无状态。对于长时间工作, 将作业排队。
  • 保持请求和响应较小;将文件放入存储并传递引用。
  • 使函数幂等:重试作业、网络错误后客户端重试或重复的 cron 交付可以运行您的代码两次。
  • 在平台的身份标头上进行授权,因为它们是调用者无法伪造的唯一值。请参阅 安全。
  • 测量您自己的延迟:每次调用都会为工作线程的启动付费。最小函数在本地堆栈上报告 duration_ms: 74。
最后更新· 2026年10月12日