Supabase 独立开发<六>:Edge Function

0 阅读3分钟

这篇文章我们介绍 Supabase 的重中之重,Edge Function。前面我们已经介绍了 Supabase 的 Auth、Database、Storage、Realtime,但是这些能力都不够灵活。考虑一个简单的需求,假如我们希望调用 Google 的 VEO 视频模型 API 来生成视频,那么就无法通过那四个组件来做了(Database 的 pg_net 扩展可以做到,后面的章节会说明)。

Edge Function 是什么?

Supabase 的 Edge Function 是一个 Serverless,和 Cloudflare 的 Worker 、AWS 的 lambda 类似。Supabase 的 Edge Function 背后使用的是 Deno Runtime,你可以使用 Typescript 或者 Javascript 编写后端代码,你也可以使用任意的这两种语言的框架和库,如 express、drizzle 等,非常灵活,开发流程上和正常的后端开发一样。客户端可以通过 HTTP 或者 WebSocket 连接上,可以直接使用 Supabase Client SDK。另外也提供 WASM 模块的能力,来解决 Typescript 或者 Javascript 性能不够的场景。

在开发时,当需要访问 Supabase 数据时,你有两种方式:

  • 使用 Supabase Client SDK ,通过 service role key方式连接
  • 使用 Supabase 提供的数据库连接串,然后使用任意的 ORM 或者 数据库驱动库连接,和正常后端开发一样

另外,如果是通过 AI 编程,因为需要涉及到前后端集成,所以可以考虑使用支持 http 方式的 rpc 框架,这样 AI 可以在前后端之间共享接口信息,特别是在多语言的项目中,如 客户端是 Android这种。我个人比较喜欢 connectrpc,可以通过 protobuf 定义接口,生成桩代码,这样类型信息可以在客户端和服务端之间共享。不过这个方法见仁见智,如果喜欢,可以尝试下。

Edge Function 的优点

作为 Serverless,Edge Function 拥有和其它 Serverless 一样的优点:

  • 就近运行,可以使用 Supabase 的 Edge Function 在用户附近运行,减少网络延迟,提高响应速度。
  • 自动扩展,可以根据请求量自动扩展,不需要自己去考虑扩缩容的问题。

Edge Function 的缺点

这些限制中,时间限制是 Serverless 的一些固有限制,其它 Serverless 平台也存在时间限制,只是时间长短不一样。

  • 语言限制:只能使用 Typescript 或者 Javascript。
  • 时间限制:物理时间,免费版物理始终160s内,付费版400s内,cpu时间2s内。

Edge Function 的时间限制解决方案

对于 Edge Function 的时间限制,起码有 2 个解决方案:

  • 长任务拆分:将一个长任务拆分成多个步骤的短任务,周期性执行。我之前一个项目,AI生成视频然后转码的任务就是这样实现的。
  • 单独的 Server:因为 Supabase postgres 是对公网开放的,所以你可以检查自己的数据库所在的区域,在任何云平台准备自己的后端服务器去连接 Supabase。

希望 Supabase 早日提供一种解决长时间运行的任务的方案,比如 常驻运行时 之类的。