Skip to content
Edge Functions

边缘函数架构

Understanding the Architecture of Supabase Edge Functions

本指南讲解了 Supabase Edge Functions 的架构和内部工作原理,基于视频《Supabase Edge Functions Explained》中展示的概念。Edge Functions 是运行在网络边缘的无服务器计算资源,靠近用户运行,可以实现低延迟执行,比如 API 端点、Webhook 和实时数据处理等任务。本指南将 Edge Functions 拆解为几个关键部分:示例用例、部署流程、全球分布以及执行机制。

🌐 This guide explains the architecture and inner workings of Supabase Edge Functions, based on the concepts demonstrated in the video "Supabase Edge Functions Explained". Edge functions are serverless compute resources that run at the edge of the network, close to users, enabling low-latency execution for tasks like API endpoints, webhooks, and real-time data processing. This guide breaks down Edge Functions into key sections: an example use case, deployment process, global distribution, and execution mechanics.

1. 通过一个例子理解边缘函数:图片滤波 #

🌐 1. Understanding Edge Functions through an example: Image filtering

为了说明边缘函数如何运作,考虑一个图片分享应用,用户可以上传图片并在保存前应用滤镜(例如灰度或怀旧色)。

🌐 To illustrate how edge functions operate, consider a photo-sharing app where users upload images and apply filters (e.g., grayscale or sepia) before saving them.

  • 工作流程概览
    • 用户把一张原始图片上传到 Supabase 存储。
    • 当用户选择一个筛选器时,客户端应用(使用 Supabase JavaScript SDK)会调用一个名为类似“apply-filter”的边缘函数。
    • 边缘函数:
      1. 从 Supabase 存储下载原始图片。
      2. 使用像 ImageMagick 这样的库来应用滤镜。
      3. 把处理过的图片上传回存储。
      4. 将过滤后的图片路径返回给客户端。
  • 为什么选择 Edge Functions?
    • 它们处理计算密集型任务,而不会给客户端设备或数据库带来负担。
    • 执行在服务器端进行,但在边缘节点上,确保速度和可扩展性。
    • 开发者在 Supabase functions 目录下的 JavaScript 文件中定义函数。

这个例子展示了边缘函数作为轻量级、按需执行的代码片段,可以与 Supabase 的存储和身份验证等服务无缝集成。

🌐 This example highlights edge functions as lightweight, on-demand code snippets that integrate seamlessly with Supabase services like Storage and Auth.

2. 部署流程 #

🌐 2. Deployment process

部署边缘函数非常简单且自动化,无需手动设置服务器。

🌐 Deploying an edge function is straightforward and automated, requiring no manual server setup.

  • 部署步骤
    1. 在你本地的 Supabase 项目里写函数代码(例如,在 supabase/functions/apply-filter/index.ts)。
    2. 通过 Supabase CLI 运行命令 supabase functions deploy apply-filter
    3. CLI 会把函数及其依赖打包成一个 ESZip 文件——这是 Deno 创建的一种紧凑格式,包含完整的模块图,便于快速加载和执行。
    4. 打包的文件已上传到 Supabase 的后台。
    5. Supabase 会为这个函数生成一个独特的 URL,让它可以全球访问。
  • 部署的主要好处
    • 自动处理依赖和打包。
    • 无需管理基础设施;Supabase 会将功能分发到其全球边缘网络上。

一旦部署好了,这个函数就可以从任何地方调用,Supabase 会处理扩展和可用性问题。

🌐 Once deployed, the function is ready for invocation from anywhere, with Supabase handling scaling and availability.

3. 全球分布与路由 #

🌐 3. Global distribution and routing

边缘函数利用分布式架构,通过在靠近用户的地方运行代码来最小化延迟。

🌐 Edge functions leverage a distributed architecture to minimize latency by running code close to the user.

  • 架构组件:
    • 全球 API 网关:作为所有请求的入口。它使用请求者的IP地址来确定地理位置,并将请求路由到最近的边缘节点(例如,将来自阿姆斯特丹的请求路由到法兰克福)。
    • 边缘位置:Supabase 在全球范围内的数据中心网络,函数会在这些地点进行复制。ESZip 包在部署时会自动分发到这些位置。
    • 路由逻辑:基于地理位置映射,确保功能尽可能在用户附近执行,以获得最佳性能。
  • 分销运作方式
    • 部署后,这个功能会传播到所有边缘节点。
    • 这种设置让开发者不需要手动配置 CDN 或地区服务器。

这个全球边缘网络使边缘功能成为“原生边缘”,无论用户身在何处都能提供一致的性能。

🌐 This global edge network is what makes edge functions "edge-native," providing consistent performance regardless of user location.

4. 执行机制:快速且独立 #

🌐 4. Execution mechanics: Fast and isolated

边缘函数高效的核心在于它们的执行环境,这种环境优先考虑速度、隔离性和可扩展性。

🌐 The core of edge functions' efficiency lies in their execution environment, which prioritizes speed, isolation, and scalability.

  • 请求处理:
    1. 一个客户端向函数的 URL 发送 HTTP 请求(例如 POST),包括像认证头、图片 ID 和滤镜类型这样的参数。
    2. 全球 API 网关会把它路由到最近的边缘节点。
    3. 在边缘,Supabase 的 edge runtime 会验证请求(例如,检查授权)。
  • 执行环境:
    • 每次调用都会启动一个新的 V8 独立实例。V8 是 Chrome 和 Node.js 使用的 JavaScript 引擎,提供一个轻量级、沙盒化的环境。
    • 每个隔离体都有自己的内存堆和执行线程,确保完全隔离——并发请求之间不会互相干扰。
    • ESZip 包被加载到隔离环境中,函数代码开始运行。
    • 执行后,响应(例如,过滤后的图片路径)会发送回客户端。
  • 性能优化:
    • 冷启动:即使是首次执行也很快(毫秒级),这得益于紧凑的 ESZip 格式和极少的 Deno 运行时开销。
    • 快速启动:隔离单元可以在一段时间内(取决于计划)保持活跃,以便处理后续请求而无需重启。
    • 并发:多个隔离实例可以在同一个边缘位置同时运行,支持高流量。
  • 隔离与安全
    • 隔离可以防止一个功能的副作用影响到其他功能,提高可靠性。
    • 没有持久状态;每次运行都是无状态的,非常适合短期任务。

与传统的无服务器或单体架构相比,这种设置提供了更低的延迟、自动扩展,以及无需管理基础设施,非常适合全球应用。

🌐 Compared to traditional serverless or monolithic architectures, this setup offers lower latency, automatic scaling, and no infrastructure management, making it perfect for global apps.

好处和使用场景 #

🌐 Benefits and use cases

  • 优点
    • 低延迟:靠近用户可以减少往返时间。
    • 可扩展性:无需配置服务器即可处理不同负载。
    • 开发者友好:专注于代码;其余的交给 Supabase 管理。
    • 经济实惠:按使用付费,快速执行,最大限度降低成本。
  • 常见用例
    • 实时数据转换(例如,图片处理)。
    • API 集成和网页钩子。
    • 边缘的个性化和A/B测试。