Supabase 是一个以 PostgreSQL 为核心的开源 Backend-as-a-Service(BaaS)平台,定位类似 Firebase,但采用 PostgreSQL 作为核心数据库。它通过多个独立服务提供完整的 Backend 能力。
其中,
- PostgREST 根据 PostgreSQL 的 Table、View、Function 自动生成 REST API;
- Auth 提供用户注册、登录、OAuth、JWT 等身份认证;
- Realtime 提供 WebSocket、数据库变更监听等实时能力;
- Storage 提供对象存储;
- Edge Functions 用于运行服务端业务逻辑。
- 此外还提供 GraphQL、向量数据库、Cron、Queues 以及 Supabase Studio Web 管理控制台。
- 向量数据库是基于 PostgreSQL pgvendor 拓展实现。
- Queues 是基于 PostgreSQL pgmq 拓展实现的消息队列,不需要额外部署 Kafka、RabbitMQ 等消息中间件。
- Cron 是基于 PostgreSQL pg_cron 拓展实现的定时任务管理功能,支持秒级调度。
微服务架构
以 PostgreSQL 为核心、多个独立服务围绕 PostgreSQL 数据库协作的 BaaS 平台。
Client
│
▼
Envoy API Gateway
│
┌───────────────────┼────────────────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
GoTrue PostgREST Realtime Storage Functions
Auth REST WS S3 Deno
│ │ │ │ │
└──────────┴────────┼─────────┴───────────┘
▼
PostgreSQL
▲
│
Supavisor
Connection Pool
| 组件 | 技术 | 职责 |
|---|---|---|
| postgres-meta | TypeScript/Node.js | 数据库管理 API |
| pg_graphql | PostgreSQL Extension | PostgreSQL → GraphQL |
- Studio - A dashboard for managing your self-hosted Supabase project
TypeScript 语言开发,Web 管理控制台。 - Envoy - API gateway (default; Kong is available as an optional override via
sh run.sh config add kong)
API 网关。 - Auth - JWT-based authentication API for user sign-ups, logins, and session management
认证。 - PostgREST - Web server that turns your PostgreSQL database directly into a RESTful API
PostgreSQL → REST API。 - Realtime - Elixir server that listens to PostgreSQL database changes and broadcasts them over websockets
- Storage - RESTful API for managing files in S3, with Postgres handling permissions
对象存储。 - imgproxy - Fast and secure image processing server
- postgres-meta - RESTful API for managing Postgres (fetch tables, add roles, run queries)
- PostgreSQL - Object-relational database with over 30 years of active development
Supabase 自己维护了一个代码仓库,PostgreSQL + 插件集合(30 个左右) - Edge Runtime - Web server based on Deno runtime for running JavaScript, TypeScript, and WASM services
Rust 语言开发,是一个集成和定制 Deno Runtime 的 Web Server,用于隔离和执行 JavaScript、TypeScript 以及 WASM 服务,为 Supabase Edge Functions(Serverless Functions)提供运行环境。 - Logflare - Log management and event analytics platform
Elixir 语言开发,日志采集、存储、查询和分析服务。2021 年被 Supabase 收购。 - Vector - High-performance observability data pipeline for logs
- Supavisor - Supabase's Postgres connection pooler
Elixir 语言开发,PostgreSQL 连接池、多租户连接管理
各服务在 Gateway 后面是并行的独立服务,而不是一条调用链。
比如前端的 API 调用,经过 Envoy 之后直达 Haskell 开发的 PostgREST 服务,然后到达 DB。
Supavisor 需要单独解释:
- 为了控制数据库连接数量、避免大量并发或突发连接耗尽 PostgreSQL 资源,Supabase 引入了独立的 Supavisor PostgreSQL 连接池代理服务,可运行于 PostgREST 与 PostgreSQL 之间,对数据库连接进行复用和管理。
- Supavisor 提供透明的 PostgreSQL 协议代理,因此从 PostgREST 的角度看,它就是一个 PostgreSQL 连接端点,PostgREST 无需感知后端是否存在 Supavisor。
部署
官方提供的 Self-hosted 方法就是通过 Docker Compose 部署。
官方文档上也有社区提供支持的 K8S 部署方式。
推荐配置是 4C8G + 80G 磁盘。