Supabase 深度解析:101K Star 开源版 Firebase,一个周末搞定百万并发后端
后端开发最痛苦的事是什么?不是写代码,是搭基础设施——数据库、认证、实时推送、文件存储、API 网关……每一样都得从零配置。Supabase 就是来终结这种痛苦的:它用企业级开源工具重新实现了 Firebase 的全部能力,基于 PostgreSQL,完全开源,一个周末就能搭出扛住百万并发的应用。
一、为什么需要 Supabase?
Firebase 够好用,但它有三个硬伤:
- 厂商锁定——数据锁在 Google 云上,想迁移?祝你好运
- 不透明——黑盒架构,出了问题只能等 Google 修
- NoSQL 限制——Firestore 的查询能力和关系模型比,差了好几条街
Supabase 的核心思路:用 PostgreSQL 替代 Firestore,用开源组件替代 Google 私有服务,给你 Firebase 的开发体验,但不锁死你。
二、项目概览
| 项目 | 详情 |
|---|---|
| GitHub | supabase/supabase |
| Stars | 101K+ |
| 主语言 | TypeScript |
| 协议 | Apache 2.0 |
| 官网 | supabase.com |
Supabase 由 Paul Copplestone 和 Ant Wilson 于 2020 年创立,目前已获得超过 1.16 亿美元融资,是全球最火的开源 BaaS(Backend as a Service)平台。
三、核心架构:8 层组件如何协同
Supabase 不是单体应用,而是由 8 个开源组件精密编排的架构:
┌─────────────────────────────────────────┐
│ Kong (API Gateway) │
├──────┬──────┬──────┬──────┬─────────────┤
│GoTrue│Postg │Real- │Storage│pg_graphql │
│(认证) │REST │time │(存储) │(GraphQL) │
│ │(REST │(实时) │ │ │
│ │ API) │ │ │ │
├──────┴──────┴──────┴──────┴─────────────┤
│ PostgreSQL (核心) │
├─────────────────────────────────────────┤
│ postgres-meta (数据库管理) │
└─────────────────────────────────────────┘
关键设计决策:PostgreSQL 是唯一的 Source of Truth。所有组件都围绕 Postgres 构建,数据只存一份,不存在同步问题。
3.1 PostgreSQL——一切的基础
30+ 年历史的企业级关系数据库,Supabase 给你的是专用实例(不是共享的),完整 SQL 权限,支持扩展:
pg_graphql——直接从数据库暴露 GraphQL APIpgvector——向量搜索,AI 应用的标配PostGIS——地理空间查询- Row Level Security(RLS)——行级权限控制,安全 granularity 直接到行
3.2 PostgREST——零代码 REST API
数据库建好表,REST API 自动生成。不需要写一行后端代码:
-- 在 SQL Editor 中执行
CREATE TABLE todos (
id BIGSERIAL PRIMARY KEY,
task TEXT NOT NULL,
is_complete BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
表创建完成后,立即获得:
GET /rest/v1/todos——查询POST /rest/v1/todos——插入PATCH /rest/v1/todos?id=eq.1——更新DELETE /rest/v1/todos?id=eq.1——删除
支持过滤、排序、分页、联表查询,全部通过 URL 参数完成。
3.3 Realtime——WebSocket 实时订阅
基于 Elixir 构建的实时服务器,监听 PostgreSQL 的 logical replication,将数据库变更实时推送到客户端:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
// 监听 todos 表的插入事件
supabase
.channel('todos-changes')
.on('postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'todos' },
(payload) => console.log('新任务:', payload.new)
)
.subscribe()
三种实时模式:
- Broadcast——客户端间直接广播
- Presence——在线状态追踪(谁在线)
- Postgres Changes——数据库变更推送
3.4 GoTrue——JWT 认证体系
支持邮箱/密码、手机号 OTP、以及 GitHub、Google、Apple 等 30+ 种 OAuth 登录。基于 JWT,无状态,天然适合分布式场景。
// GitHub 登录,一行搞定
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'github'
})
3.5 Edge Functions——Deno 边缘计算
基于 Deno 运行时的 Serverless 函数,部署到全球边缘节点,冷启动 < 5ms:
// functions/hello/index.ts
Deno.serve(async (req) => {
const data = { message: 'Hello from Edge!' }
return new Response(JSON.stringify(data), {
headers: { 'Content-Type': 'application/json' }
})
})
3.6 Storage——S3 兼容文件存储
RESTful API 管理文件,权限由 PostgreSQL RLS 控制。支持图片变换(缩放、裁剪、格式转换),CDN 加速分发。
3.7 向量与 AI——pgvector
Supabase 内置 pgvector 扩展,直接在数据库中存储和搜索向量嵌入:
-- 创建向量列
ALTER TABLE documents ADD COLUMN embedding vector(1536);
-- 向量相似度搜索
SELECT content, embedding <=> '[0.01, 0.02, ...]'::vector AS distance
FROM documents
ORDER BY distance
LIMIT 10;
RAG 应用、语义搜索,不需要额外的向量数据库。
四、快速上手:5 分钟搭建完整后端
4.1 创建项目
# 安装 CLI
npm install -g supabase
# 登录
supabase login
# 初始化项目
supabase init
# 启动本地开发环境(需要 Docker)
supabase start
本地启动后你会得到:
- PostgreSQL:
postgresql://postgres:postgres@localhost:54322/postgres - API:
http://localhost:54321 - Studio:
http://localhost:54323
4.2 前端集成
npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
'https://your-project.supabase.co',
'your-anon-key'
)
// 增
const { data, error } = await supabase
.from('todos')
.insert({ task: '学习 Supabase' })
// 查
const { data: todos } = await supabase
.from('todos')
.select('*')
.eq('is_complete', false)
.order('created_at', { ascending: false })
// 改
await supabase
.from('todos')
.update({ is_complete: true })
.eq('id', 1)
// 删
await supabase
.from('todos')
.delete()
.eq('id', 1)
4.3 自托管部署
不想用云服务?Docker 一把梭:
# 克隆仓库
git clone --depth 1 https://github.com/supabase/supabase
# 复制环境变量
cd supabase/docker
cp .env.example .env
# 启动所有服务
docker compose up -d
五、免费套餐够用吗?
| 资源 | 免费额度 |
|---|---|
| 数据库 | 500MB |
| 文件存储 | 1GB |
| 带宽 | 5GB/月 |
| 月活用户 | 50,000 |
| API 请求 | 无限 |
| Edge Function 调用 | 500K/月 |
对个人项目和 MVP 来说绰绰有余。Pro 套餐 $25/月起,数据库扩到 8GB,适合生产环境。
六、与 Firebase 正面 PK
| 维度 | Supabase | Firebase |
|---|---|---|
| 数据库 | PostgreSQL(关系型) | Firestore(NoSQL) |
| 开源 | ✅ 完全开源 | ❌ 闭源 |
| 自托管 | ✅ 支持 | ❌ 不支持 |
| 查询能力 | SQL 全功能 | 受限的 NoSQL 查询 |
| 实时推送 | ✅ WebSocket | ✅ WebSocket |
| 边缘函数 | Deno(TypeScript) | Node.js |
| 向量/AI | ✅ pgvector 内置 | ❌ 需额外集成 |
| 数据迁移 | SQL 导出,随时走 | 导出困难 |
| 定价 | 免费起步,Pro $25/月 | 按用量计费,可能失控 |
Supabase 的短板:离线支持不如 Firebase 完善,Firestore 的离线同步机制更成熟。如果你的应用重度依赖离线场景,需要额外处理。
七、百万并发的底气从哪来?
"一个周末搞定百万并发"不是吹的,底气来自三个层面:
- PostgreSQL 本身的并发能力——经过 30 年打磨,pg 的连接池、查询优化、索引机制都是顶级水准
- 连接池设计——Supabase 使用 PgBouncer 做连接池,一个 Postgres 进程服务数千并发连接
- 边缘架构——Edge Functions 部署到全球 30+ 节点,API 网关 Kong 做负载均衡
实际场景中,合理配置的 Supabase 实例轻松应对 10 万+ QPS。配合读副本和分区表,百万级并发完全可行。
八、总结
Supabase 用一句话概括:Firebase 的开发体验 + PostgreSQL 的工程能力 + 开源的自主权。
它特别适合:
- 前端/全栈开发者想快速搭建后端
- 创业团队做 MVP,不想在基础设施上烧时间
- 对数据主权有要求,需要自托管的团队
- AI 应用开发者,需要向量搜索 + 传统数据库一体化
101K Star 不是虚的——这是开发者用脚投票的结果。
参考链接
- GitHub: supabase/supabase
- 官方文档: supabase.com/docs
- Discord 社区: discord.supabase.com