快速开始

架构设计


Supabase 是开源的。我们选择可扩展的开源工具,并使其简单易用。

Supabase 并非 Firebase 的一对一映射。虽然我们正在构建 Firebase 提供的许多功能,但实现方式截然不同: 我们的技术选择大相径庭;我们使用的所有工具都是开源的;在可能的情况下,我们优先采用和支持现有工具而非从头开发。

最显著的区别是,我们使用 Postgres 而非 NoSQL 数据库。这一选择是经过深思熟虑的。我们相信没有其他数据库能在提供与 Firebase 竞争的功能的同时,保持超越其规模的扩展能力。

选择适合您的使用方式

Supabase 的目标是让 Postgres 的 所有 功能都易于使用。但这并不意味着您必须使用全部功能。如果您是 Postgres 资深用户,您可能会喜欢我们提供的工具。如果您从未使用过 Postgres,可以从简单功能开始逐步深入。如果您只想把 Postgres 当作简单的表存储,也完全没问题。

架构

每个 Supabase 项目由多个工具组成:

Postgres (数据库)

Postgres 是 Supabase 的核心。我们不会对 Postgres 数据库进行抽象封装——您可以完全权限访问和使用它。我们提供的工具让 Postgres 变得像 Firebase 一样易用。

Studio (控制面板)

一个用于管理数据库和服务的开源仪表盘。

GoTrue (认证)

基于 JWT 的用户管理和访问令牌签发 API。该系统与 PostgreSQL 的行级安全功能和 API 服务器集成。

PostgREST (API)

一个独立的 web 服务器,可将您的 Postgres 数据库直接转换为 RESTful API。 我们结合 pg_graphql 扩展来提供 GraphQL API。

实时功能 (API & 多人协作)

一个可扩展的 WebSocket 引擎,用于管理用户在线状态、广播消息和流式传输数据库变更。

存储API (大文件存储)

兼容 S3 的对象存储服务,将元数据存储在 Postgres 中。

Deno (边缘函数)

一个现代化的 JavaScript 和 TypeScript 运行时。

postgres-meta (数据库管理)

用于管理 Postgres 的 RESTful API。可获取表信息、添加角色和执行查询。

Supavisor

一个云原生的多租户 Postgres 连接池管理器。

Kong (API网关)

一个基于NGINX构建的云原生API网关。

产品原则

我们的目标是提供一种任何大型公司都会为自己设计的架构,然后围绕该架构提供对独立开发者和小团队易于使用的工具。

我们遵循一系列原则来确保可扩展性和可用性永远不会相互排斥:

所有功能均可独立运行

每个系统必须作为独立工具运行,且尽可能减少依赖组件。 对此的检验标准是:"用户能否仅使用Postgres数据库就运行这个产品?"

所有功能都是集成的

Supabase具有可组合性。尽管每个产品都能独立运行,但平台上的每个产品都应该使其他产品的价值提升10倍。 为了实现集成,每个工具都应提供API和Webhooks接口。

所有功能都是可扩展的

我们谨慎考虑添加新工具,更倾向于扩展现有工具。 这与许多云服务提供商形成鲜明对比,后者不断将产品扩展到小众用例。我们为开发者提供_基础组件_,使他们能够实现任何目标。 少即是多,但更好。

所有功能都是可移植的

为了避免供应商锁定,我们确保迁移进出都很容易。我们的云服务产品与自托管产品兼容。 我们使用现有标准来提高可移植性(如pg_dump和CSV文件)。如果出现与"Supabase"方法竞争的新标准,我们将弃用原有方法转而支持标准。 这迫使我们必须在用户体验上竞争。我们的目标是成为最好的Postgres托管服务。

着眼长远发展

我们牺牲短期利益以换取长期收益。例如,虽然可以轻易地运行一个带有额外功能的Postgres分支,但这些功能可能只有我们的客户需要。 相反,我们更倾向于支持将缺失功能贡献到上游项目,让整个社区受益。这种做法还能确保系统的可移植性和长期可持续性。

为开发者而建

"开发者"是一类特殊的用户群体:他们是_构建者_。 在评估投入产出比时,开发者能创造出极高的效率杠杆,因为他们可以构建各种产品和系统。 随着开发者群体的特征随时间演变,Supabase将持续进化产品以适应这种变化。

支持现有工具

Supabase尽可能支持现有工具和社区。Supabase更像是一个"社区的社区"——每个工具通常都有自己的社区,我们与这些社区紧密合作。 我们以协作方式践行开源理念:雇佣维护者、赞助项目、投资企业,并开发我们自己的开源工具。