BaaS(Backend as a Service)概述、平台、项目
概述
BaaS:Backend as a Service,后端即服务,用于构建和运行应用程序的后端服务平台,提供数据处理、存储和通信等功能,使开发者能专注于前端开发,无需考虑后端实现细节。
BaaS的本质是去后端化;商业BaaS平台的目标是让前端/非(资深)后端人员、甚至非技术开发者,都能快速获得(使用)后端能力。
付费
什么阿里云、腾讯云、AWS云等略过不提,这些闭源/付费产品都提供每月限额的免费资源使用量。
Firebase
Google提供的面向移动和Web应用的BaaS服务,提供在线Studio。目标用户:机器学习开发者、(偏)前端全栈开发者、初创团队、中小项目等。
提供功能
- Authentication:身份验证和用户管理
- Hosting:静态网站托管和动态内容托管
- Realtime Database:实时数据库,用于存储和同步应用程序数据;用于聊天、协同编辑等场景
- Cloud Storage:云存储和文件存储
- Cloud Functions:云函数,支持无服务器架构,用户可以编写自定义的函数来处理数据
- Cloud Messaging:消息传递
- Firebase ML:可用于训练自定义模型,或选择Cloud Vision API在此执行ML任务
- Crashlytics:崩溃报告,方便Bug-fix,trouble-shooting
- Google Analytics:数据分析,用户增长等
作为一个依托于谷歌云(GCP)的云端PaaS平台,付费与GCP绑定。
Firebase提供不同存储等级,价格也不一样,可供灵活使用:
- Standard:适合频繁访问的热数据,包括网站、流式视频和移动应用;
- Nearline:费用低。适合至少可存储30天的数据,包括数据备份和长尾多媒体内容;
- Coldline:费用很低。适合至少可存储90天的数据,包括用于灾难恢复;
- Archive:费用最低。适合至少可存储365天的数据,包括法规归档。
认证:支持Google、Facebook和Twitter等平台OAuth 2.0认证登录。
Back4App
官网,基于Parse开源(官网,GitHub)项目,支持语言如iOS、Android和JS。目标用户:移动App开发者等。提供功能:
- Data Storage:提供数据库服务,支持对象存储和文件存储
- Push Notifications:提供实时推送通知服务
- Analytics:提供数据分析服务,帮助用户了解应用程序的使用情况
- Cloud Code:提供云函数功能,支持无服务器架构
- UI Components:提供用户界面组件,帮助用户快速构建应用程序
- Push:消息推送,市场营销
- AI Agent:
- MCP:
Backendless
官网,MBaaS平台,依赖图形化数据库表示、可视化UI构建器、预构建API来执行不同的服务器端操作。目标用户:非技术人员等。
功能
- UI构建器:自带可视化UI构建器,方便处理应用客户端部分
- 数据库管理:提供可视化数据库,支持SQL和非关系型模式
- 用户推送:着陆页、电子邮件营销和推送通知,可在无需编写任何代码的情况下使用
- API服务:提供安全的预装插件、SDK和API,包括即时API和AI音频、图像插件
Supabase
官网,开源(GitHub,88.9K Star,9.9K Fork)版Firebase,基于PostgreSQL(简称PG)生态,更适合复杂业务和开发者控制。
提供功能:
- 实时数据库
- 身份认证
- 存储
- 边缘函数Edge Function
- 自动API生成,REST+GraphQL
- Dashboard仪表盘
- 与OpenAI等AI服务无缝集成;
- 适用于推荐系统、图像搜索等场景
组件
- PG生态
- 所有数据存储在PG表中
- 支持复杂查询、JOIN、事务、扩展(如PostGIS地理信息处理、PgVector向量相似度搜索)
- 开发者可直接写SQL,也可用自动生成的API
- 数据库触发器支持复杂的业务逻辑
- JSON数据类型让开发更灵活
- 全文搜索能力
- RLS:Row Level Security,行级安全性,实现细粒度的权限控制
- PostgREST:自动将PG表结构转换为RESTful API,让前端开发更便捷。
- Supabase Auth(身份认证)
- 基于GoTrue(开源认证服务):多种社交登录、双因素认证、企业级单点登录、自定义邮件模板
- 支持:邮箱、密码、OAuth(Google、GitHub、Apple等)、魔法链接(Magic Link)、SSO(企业版)
- JWT令牌集成,与RLS深度绑定
- Supabase Storage(对象存储)
- 基于PG+文件系统
- 类似AWS S3,支持上传/下载/管理文件
- 自动与Auth集成,支持权限控制
- 功能:大文件支持、图片转换、访问控制、CDN加速
- Realtime
- 基于PG的逻辑复制(Logical Replication)+WebSocket
- 客户端可订阅表变更(INSERT/UPDATE/DELETE)
- 低延迟,适合聊天、协作、通知等场景
- 功能:实时订阅、在线用户状态同步、低延迟数据传输(推送、同步)、广播机制
- 边缘函数
- 基于Deno运行时,分布式部署边缘节点,低延迟响应;支持自动扩展
- 类似AWS Lambda,用于自定义业务逻辑
- 支持TS,与Supabase SDK无缝集成
- Auto API(自动生成API)
- 根据PG表结构,自动生成:RESTful API、TS SDK、实验性GraphQL API
- 开发者无需写后端代码,前端直接调用
特性 | Supabase | Firebase |
---|---|---|
数据库 | 关系型PG | 文档型Firestore |
查询能力 | 复杂JOIN、聚合、子查询 | 有限,需反范式设计 |
事务支持 | ACID事务 | 有限(批量写入) |
实时功能 | 基于PG逻辑复制 | 基于Firestore监听 |
身份认证 | 开源GoTrue | FirebaseAuth |
存储 | SupabaseStorage | FirebaseStorage |
边缘函数 | 基于TS的Deno | 基于JS的Node.js |
开源 | 全栈开源,可自托管 | 闭源,仅SDK开源 |
自托管 | Docker/K8s一键部署 | 不支持 |
成本 | 免费层慷慨,按使用付费 | 免费层有限,易超支 |
优势 | SQL能力强、开源可控、适合复杂业务 | 生态成熟、移动端集成好、上手简单 |
适用场景
场景 | 是否推荐 | 说明 |
---|---|---|
中后台管理系统 | 强烈推荐 | SQL+RLS完美匹配 |
实时协作应用 | 推荐 | Realtime+PG逻辑复制 |
移动端App | 推荐 | Auth+Storage+EdgeFunctions |
复杂业务系统 | 推荐 | JOIN、事务、存储过程支持 |
超高并发读写 | 谨慎 | 需优化PG(分片、读写分离) |
性能
- 单实例性能:取决于PG资源配置,如CPU/内存/磁盘
- 读写分离:支持,通过多个客户端连接不同副本
- 分片:Sharding,需手动实现,如Citus扩展
- 缓存:通过边缘函数可集成Redis
Supabase正在开发Database Branching,类似Neon,支持秒级克隆数据库,适合开发/测试环境。
生态
工具 | 说明 |
---|---|
Supabase CLI | 本地开发、部署、管理 |
Supabase Studio | Web仪表盘,管理数据、Auth、Storage |
VSCode Extension | 直接在编辑器中管理Supabase项目 |
Flutter/DartSDK | 官方支持移动端开发 |
PgVector | 支持AI向量搜索,与OpenAI集成 |
PostGIS | 地理位置服务 |
使用方式:
- 云托管:Supabase Platform,官方托管,免费层可用;自动扩展,无需运维
- 自部署:适合企业私有化部署,数据完全自主可控
部署
npm install -g supabase
supabase login
supabase init
supabase start
# 或
git clone https://github.com/supabase/supabase
cd supabase/docker
docker-compose up
使用
安装客户端库:npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js'const supabase = createClient('https://your-project.supabase.com','your-anon-key'
)
// 插入数据
const { data, error } = await supabase.from('todos').insert([{ title: 'Hello Supabase!' }])
// 订阅实时变更
supabase.channel('todos').on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'todos' }, (payload) => {console.log('New todo:', payload.new)}).subscribe()
身份认证
import { createClient } from '@supabase/supabase-js'const supabase = createClient('YOUR_PROJECT_URL', 'YOUR_PROJECT_KEY')
// 邮箱密码注册
const signUp = async () => {const { data, error } = await supabase.auth.signUp({email: 'example@email.com',password: 'example-password'})
}
// 社交登录
const signInWithGithub = async () => {const { data, error } = await supabase.auth.signInWithOAuth({provider: 'github'})
}
实时数据同步
// 订阅实时更新
const subscription = supabase.channel('table_db_changes').on('postgres_changes',{event: 'INSERT',schema: 'public',table: 'messages'},(payload) => {console.log('Change received!', payload)}).subscribe()
向量搜索应用
-- 创建向量表
create table documents (id bigserial primary key,content text,embedding vector(1536)
);
-- 插入向量数据
insert into documents (content, embedding)
values ('示例文档内容','[0.1, 0.2, ..., 0.9]'::vector
);
-- 相似度搜索
select content, embedding <-> '[查询向量]'::vector as distance
from documents
order by distance
limit 5;
Supabase的核心安全模型是RLS:
-- 启用RLS
ALTER TABLE todos ENABLE ROW LEVEL SECURITY;
-- 创建策略:用户只能访问自己的todos
CREATE POLICY "User can access own todos"
ON todos
FOR ALL
USING (auth.uid() = user_id);
所有API请求自动携带JWT,PG根据auth.uid()
过滤数据。
Appwrite
官网,开源(GitHub,52.8K Star,4.7K Fork)。Appwrite使您能够选择前端语言并利用其独特功能,如身份验证、函数和存储,其用户友好的仪表盘也只需最少编码。
功能
- 身份验证:提供30+种身份验证机制
- 数据库:高响应的DBMS使查询、过滤和存储数据变得快捷,遵循现代权限流程并提供定制的数据验证
- 存储:通过文件上传、管理等功能,支持存储和压缩所有类型数据
- 消息传递:发送应用内消息和推送通知
PocketBase
官网,开源(GitHub,51.1K Star,2.7K Fork)的后端即服务(BaaS)平台,把数据库、用户认证、文件管理、API接口全部打包在一个可执行文件里。数据库使用SQLite,支持实时订阅,还自带管理后台界面。
适用于原型开发和中小型项目,数据建模特别方便,在Web界面就能创建表结构。字段类型支持文本、数字、布尔、文件、关联。WebSocket连接建立后,数据变化会自动推送到前端。
功能
- 内嵌数据库:基于SQLite,支持实时数据订阅。别小看SQLite,对于中小型应用来说性能完全够用。
- 用户管理系统:注册、登录、邮箱验证、密码重置这些功能开箱即用。OAuth2集成也支持,Google、GitHub登录分分钟搞定。
- 文件存储:图片、文档上传下载不在话下,还支持图片自动缩放。不用折腾七牛云、阿里云OSS什么的。
- 管理后台:Web界面直接管理数据,增删改查都有。界面设计得挺现代化,不像那些老古董CMS。
- REST API:自动生成RESTful接口,前端直接调用就行。还有JavaScript和Dart的SDK,用起来特别顺手。
安装
wget https://github.com/pocketbase/pocketbase/releases/download/v0.29.3/pocketbase_0.29.3_linux_amd64.zip
unzip pocketbase_0.29.3_linux_amd64.zip
./pocketbase serve
浏览器打开http://localhost:8090
体验。
GO SDK接入:
package mainimport ("github.com/pocketbase/pocketbase""github.com/pocketbase/pocketbase/core"
)func main() {app := pocketbase.New()app.OnServe().BindFunc(func(se *core.ServeEvent)error {se.Router.GET("/hello", func(re *core.RequestEvent)error {return re.String(200, "Hello world!")})return se.Next()})app.Start()
}
SurrealDB
官网,开源(GitHub,30.1K Star,1K Fork)。更像是BaaS平台背后的引擎,而不是面向最终开发者的成品服务。
适用场景
- 实时聊天:用
LIVE SELECT * FROM message WHERE room=$id
就能把新消息推到浏览器,省去socket.io
服务器。 - SaaS多租户:一张表搞定租户隔离,字段
DEFINE FIELD tenant ON TABLE order VALUE $session.tenant
自动注入,查询和索引天然带租户前缀。 - 游戏存档:嵌入式副本让手机端离线继续玩,回网后增量同步云端,SurrealDB自动处理版本冲突合并。
- 无服务器API:Vercel上30行函数
Surreal.connect()
直连线上集群,一个请求既查库存又减库存还发消息,Lambda冷启动仅180ms。
局限
- 事务在单机用互斥锁,集群用Percolator协议,官方承认跨分片事务延迟比TiDB略高;
- 生态刚起步,Grafana、Prometheus exporter由社区维护,文档不算厚
- 部署TiKV需要额外学习成本,如果只想要开箱即用,memory或RocksDB后端在超过500GB数据下会出现压缩暂停观测到的秒级卡顿。
如果你正在做一个需要实时+离线协同、文档嵌套又偶尔跑复杂JOIN的新项目,确实能让技术栈瘦一圈:
- 砍Redis Pub/Sub,节省云服务账单
- 砍ETL链路,前端直接对接数据库变更事件
- 砍Mongo分片+Postgres报表的双写难题
原理
两个关键词:多模型(multi-model)和实时协同(real-time collaboration)
底层实现SurrealKV
,用Bitcask作为LSM-tree存储层,Key-Value接口把文档切成扁平tuple,保留字段级版本号,才能在不锁定schema的前提下维持可更新的二级索引。
实时推送:数据库变消息队列
传统方案把写操作落表,再让CDC工具(Debezium)推到Kafka,下游服务做投影。SurrealDB把这些步骤收进LIVE SELECT
语句:LIVE SELECT * FROM temperature WHERE location='a1';
一旦temperature
表被插入或更新,WebSocket通道直接推送完整JSON给订阅客户端,延迟实测在本地环回中<1 ms。
在物联网场景下,一条温控传感器每秒写入10次,SurrealDB把变更事件当成数据库内的一等公民,客户端不需要解析binlog、拼合offset,直接拿事件对象就渲染图表,前端代码直接省掉一个Node中间层。
嵌入式与分布式同一个二进制
开发机执行surreal start --log=trace --user=root --pass=root memory
就能跑完整的ACID实例;生产环境跑surreal start --node=3 --bind=0.0.0.0:8000 tikv://10.0.0.1:2379
即可接入TiKV集群做横向扩容,两者同一个二进制文件。切换时不需要改代码,只要换启动参数,连接字符串依旧是surreal://root:root@localhost:8000
。
对中小企业来说,这意味着上线第一天用单机省成本,等订单量上来直接水平扩容,数据零迁移、客户端零改动。官方给出的基准:在8核32GB的三节点集群上,SurrealDB跑2.3万次QPS的混合读写,P99延迟在15ms左右,和同等规格PG+Redis双栈相当。
WebAssembly驱动的嵌入式边缘副本
一个容易被忽略的特性:SurrealDB可以编译到WASM,直接运行在浏览器或Cloudflare Worker里。查询引擎、事务与存储全部塞进浏览器沙箱,前端离线应用把数据存在IndexedDB,等网络恢复再和云端同步。官方Demo用300KB的WASM包跑一个带图查询的记事本,断网状态照样编辑内容,在线后自动冲突合并。
这一步真正做到了“端-边-云”同构。IoT设备如果运行wasmedge
,可以直接在芯片里做轻量级事务,不需要额外MQTT broker。
开发者上手只需一份SQL方言
SurrealQL保持了与SQL接近的语法:CREATE person:100 SET name='Ada Lovelace', skills=['math','code'];
插入文档;RELATE person:100->loves->person:101;
直接建图边;SELECT <-loves<-person.name FROM person:101;
双向图查找;支持事务BEGIN
、COMMIT
;权限控制用DEFINE TOKEN
生成JWT。熟悉的工程师半小时就能写CURD,学习曲线远低于Gremlin或Cypher。
CLI附带的surreal import
可以把CSV、JSONL、SQL dump直接流式灌库,免去ETL脚本。
实战
部署:docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start
NHost
官网,开源(GitHub,8.8K Star,544 Fork)。提供完全托管的云基础设施、快速开发和改进的GraphQL。简洁的仪表盘让开发者能在几分钟内部署和配置后端,使开发团队专注于客户端操作和核心业务。
功能
- 数据库:基于PG,支持像处理电子表格一样,添加和编辑数据和表
- GraphQL API:赋予GraphQL API聚合数据、启用实时订阅和轻松查询数据的能力。Hasura GraphQL引擎支持此API以加速触发器功能
- 身份验证:可在几秒钟内为移动和网络应用程序部署企业级身份验证,如SSO、多因素认证、WebAuthn集成
- AI工具包:
Kuzzle
官网,开源(GitHub,1.6K Star,134 Fork),适合建筑和物流行业处理企业级数据科学和物联网项目,提供本地和云解决方案。
功能
- 多协议API:开发者可方便地根据需求定制API协议,默认支持MQTT、HTTP和WebSocket;
- 实时引擎:负责数据实时访问库和发布/订阅通知;
- SDK:支持React、Dart、JS、Vue、Angular等;
- 用户认证:提供500+种验证方式。
推荐阅读
- BaaS项目介绍