Supabase Backend-as-a-Service 平台介绍

Supabase 是一个以 PostgreSQL 为核心的开源 Backend-as-a-Service(BaaS)平台,定位类似 Firebase,但采用 PostgreSQL 作为核心数据库。它通过多个独立服务提供完整的 Backend 能力。

其中,

  1. PostgREST 根据 PostgreSQL 的 Table、View、Function 自动生成 REST API;
  2. Auth 提供用户注册、登录、OAuth、JWT 等身份认证;
  3. Realtime 提供 WebSocket、数据库变更监听等实时能力;
  4. Storage 提供对象存储;
  5. Edge Functions 用于运行服务端业务逻辑。
  6. 此外还提供 GraphQL、向量数据库、Cron、Queues 以及 Supabase Studio Web 管理控制台。
    1. 向量数据库是基于 PostgreSQL pgvendor 拓展实现。
    2. Queues 是基于 PostgreSQL pgmq 拓展实现的消息队列,不需要额外部署 Kafka、RabbitMQ 等消息中间件。
    3. 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
  1. Studio - A dashboard for managing your self-hosted Supabase project
    TypeScript 语言开发,Web 管理控制台。
  2. Envoy - API gateway (default; Kong is available as an optional override via sh run.sh config add kong)
    API 网关。
  3. Auth - JWT-based authentication API for user sign-ups, logins, and session management
    认证。
  4. PostgREST - Web server that turns your PostgreSQL database directly into a RESTful API
    PostgreSQL → REST API。
  5. Realtime - Elixir server that listens to PostgreSQL database changes and broadcasts them over websockets
  6. Storage - RESTful API for managing files in S3, with Postgres handling permissions
    对象存储。
  7. imgproxy - Fast and secure image processing server
  8. postgres-meta - RESTful API for managing Postgres (fetch tables, add roles, run queries)
  9. PostgreSQL - Object-relational database with over 30 years of active development
    Supabase 自己维护了一个代码仓库,PostgreSQL + 插件集合(30 个左右)
  10. 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)提供运行环境。
  11. Logflare - Log management and event analytics platform
    Elixir 语言开发,日志采集、存储、查询和分析服务。2021 年被 Supabase 收购。
  12. Vector - High-performance observability data pipeline for logs
  13. Supavisor - Supabase's Postgres connection pooler
    Elixir 语言开发,PostgreSQL 连接池、多租户连接管理

各服务在 Gateway 后面是并行的独立服务,而不是一条调用链。
比如前端的 API 调用,经过 Envoy 之后直达 Haskell 开发的 PostgREST 服务,然后到达 DB。

Supavisor 需要单独解释:

  1. 为了控制数据库连接数量、避免大量并发或突发连接耗尽 PostgreSQL 资源,Supabase 引入了独立的 Supavisor PostgreSQL 连接池代理服务,可运行于 PostgREST 与 PostgreSQL 之间,对数据库连接进行复用和管理。
  2. Supavisor 提供透明的 PostgreSQL 协议代理,因此从 PostgREST 的角度看,它就是一个 PostgreSQL 连接端点,PostgREST 无需感知后端是否存在 Supavisor。

部署

官方提供的 Self-hosted 方法就是通过 Docker Compose 部署。
官方文档上也有社区提供支持的 K8S 部署方式。

推荐配置是 4C8G + 80G 磁盘。

如果你有魔法,你可以看到一个评论框~