这篇文章我们介绍 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 早日提供一种解决长时间运行的任务的方案,比如 常驻运行时 之类的。