写点什么

【架构篇】Supabase 架构和功能介绍

作者:张文平
  • 2023-08-26
    湖北
  • 本文字数:2325 字

    阅读完需:约 8 分钟

【架构篇】Supabase架构和功能介绍

Supabase 是什么

Supabase 将自己定位为 Firebase 的开源替代品,提供了一套工具来帮助开发者构建 web 或移动应用程序。Supabase 是建立在 Postgres 之上的,Postgres 是一个免费的开源数据库,被认为是世界上最稳定、最先进的数据库之一。Supabase 对标 Firebase,因此也属于 BaaS,下面是 cloudflare 对 BaaS 的一段比较经典的定义描述:

后端即服务 (BaaS) 是一种云服务,开发人员在使用 BaaS 进行 Web 或移动应用开发时,仅需自行编写和维护前端代码。BaaS 提供商为开发者提供了开发应用所需要的后端服务,例如用户身份验证、数据库管理、推送通知(针对移动应用程序),以及云存储和托管等。

BaaS 使开发人员可以专注于编写前端应用程序代码。通过 BaaS 供应商提供的 API 和 SDK,他们可以集成所需的所有后端功能,而无需自行构建后端。他们也不必管理服务器、虚拟机或容器,即可保持应用程序运行。因此,开发者可以更快地构建和启动移动应用程序和 Web 应用程序。

Supabase 与 Firebase 的关系

Supabase 号称是 Firebase 的开源替代,但其底层技术和对外接口实际上跟 Firebase 完全不同,因此用 Firebase 开发的应用是不能直接迁移到 Supabase 上的,需要进行代码改造。

下面是一些主要的区别:

  • Firebase 提供的是 NoSQL 接口(Firestore),其功能和接口相对简单,入门容易,但是数据关联查询能力要弱很多。而 Supabase 的底层是 PostgreSQL,可以作为简单的 kv 来使用,也可以完成复杂的企业级场景应用的构建。

  • Supabase 的核心组件都是基于开源工具构建的。Firebase 只有商业版本,且国内无法使用。

  • 开发者如果有条件,可以自己部署 Supabase 在私有云环境中使用。Firebase 则只能使用 Google 的服务。

Supabase 基本架构

Supabase 围绕 PostgreSQL 组合了一系列的开源工具,用以实现 BaaS 所需的用户认证、实时数据库、对象存储、RESTAPI 接口等功能。在整合这些工具的同时,为开发者封装了统一的 SDK,方便开发者以统一的方式调用这些能力。官方提供了 JavaScript 和 Flutter 的 SDK,社区贡献了 Python、C#、Swift、Kotlin 的 SDK,开发者在开发移动端和 web 应用时,可以很方便的调用 Supabase 提供的后端能力。

下面是 Supabase 整体架构图:

开发者主要通过三个组件来使用 Supabase

  • Supabase SDK

如上所述,Supabase 官方及社区贡献了目前主流的移动端和 Web 端的 SDK,帮助开发者更容易的开发应用。Supabase SDK 有非常多的子项目构成,通常以 supabase-*命名,如 supabase-js,supabase-dart。

  • Supabase Studio

Studio 是 Supabase 的管理页面,也就是 suapbase 的官方网站以及 project 管理控制台这些 Web 及后端服务都是 Studio 这个工具实现的。studio 的代码在 supabase 的主仓库里。

  • Supabase CLI

supabase 的命令行管理工具,可以方便的在命令行上管理 project。

Supabase 通过四个核心组件为开发者提供后端服务

  • Postgrest

postgres 是一个历史比较悠久的开源组件,能够将 postgresql 以 REST 接口暴露给开发者,开发者可以直接通过 HTTP 接口操作数据库。

  • storage api

提供对象存储功能,解决开发者需要上传、下载文件的需求,比如图片、文档等。storage api 将数据存储在 S3 存储上。

  • gotrue

用户登录认证模块,帮助用户简化其应用的用户管理。允许开发者使用邮箱、手机号进行注册、登录模块的开发,也可以通过 OAuth 协议接入 github、google、apple 等平台的账号。

  • realtime

realtime 利用 postgresql 的 listen/notify 机制,实现了 postgres 数据库实时数据变更通知能力。

在此基础上,Supabase 还提供了如下一些能力

  • 云函数(edge function)

postgrest 本身提供了调用 postgresql function 的能力,开发者可以在 pg 中用 sql 或者 JavaScript 编写函数,然后通过 rpc 接口调用 pg 的函数。pg 的函数能在一定程度上解决部分业务场景的需求,但是仍旧存在一些不方便或者不直观的地方。

云函数(edge function)可以更灵活的适配一些场景,比如支付等需要跟第三方系统进行对接的场景,使用云函数可以让开发者编写后端代码并运行在服务端。

  • Graphql

graphql 是通过 postgresql 插件实现的,开发者在 postgres 建表之后,可以直接通过 graphql 进行数据库操作。

  • Web hook

Web hook 为开发者提供了事件触发能力,开发者可以设定满足某个条件时,自动触发外部接口的调用,从而跟第三方系统进行集成。比如跟飞书机器人集成。

Supabase 还依赖下面这些组件来提供服务

  • PostgreSQL

一切的核心。Supabase 整个服务是围绕 PostgreSQL 构建的。

  • kong

API 网关。负责将 API 请求路由到目标服务组件,并转发结果给用户。

  • postgres-meta

PostgreSQL 的元数据管理组件,主要为 studio 提供服务,可以用来查询数据库中的表、角色,执行 SQL 等。

Supabase 技术栈

由于 Supabase 组合非常多的开源组件,因此其后端服务(不包括 SDK)的整体技术栈也相对复杂。使用到的开发语言和框架有:

  • Javascript/Typescript

  • Tailwind

  • Go

  • Elixir

  • Haskell

  • React

  • Nextjs

  • Phoenix

  • fastify

  • knex

  • chi

这其中有不少国内比较冷门的编程语言,比如 Haskell、Elixir

Supabase SDK 介绍

Supabase 的 SDK 也是通过组合多个客户端库实现的,以 JavaScript SDK 为例:

如上图所示,supabase-js 实际上是粘合了多个不同的组件的 sdk 客户端,这样做的好处:

  • 开发者不需要关注某个具体的组件如何工作,全部统一使用 supabase-js 的接口访问后端服务。

  • supabase-js 帮助开发者完成了各个组件间用户认证鉴权的统一处理。

总结

Supabase 以 PostgreSQL 为核心,组合使用了很多优秀的开源工具,为开发者提供了一个架构良好、简单易用的开发平台。用户可以使用 Supabase 提供的托管服务,也可以使用这些组件自己搭建平台在内部使用。伴随着 PostgreSQL 的流行,整个 pg 生态会更加完善,开发者也会越来越多的首选 PostgreSQL 作为核心数据库。Supabase 几乎是将 PostgreSQL 当做操作系统来使用,充分发掘了 PostgreSQL 的各种优势和能力,在后面我会给大家做更多的分享,相信能让你脑洞大开。

发布于: 2023-08-26阅读数: 19
用户头像

张文平

关注

Supabase先行者 2020-08-24 加入

还未添加个人简介

评论

发布
暂无评论
【架构篇】Supabase架构和功能介绍_postgres_张文平_InfoQ写作社区