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

news2025/1/8 21:13:27

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的各种优势和能力,在后面我会给大家做更多的分享,相信能让你脑洞大开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ValueError: Index contains duplicate entries,cannot reshape

项目场景: python-dataframe 在对行转列的时候出现 ValueError: Index contains duplicate entries,cannot reshape 问题描述 dataframe官方文档 # 为什么报错 是因为 index 和 columns 有重复值 df df.drop_duplicates(subset[foo,bar],keepfrist) df.pivot(i…

web vr3d可视化编辑工具推动VR教育应用落地和发展

VR编辑器可广泛的应用于教育教学、城市规划、室内设计、工业仿真、古迹复原、桥梁道路设计、军事模拟等行业。该软件适用性强、操作简单、功能强大、高度可视化、所见即所得,他的出现将给正在发展的VR产业注入新的活力。 作为企业级VR应用的一款重要工具&#xff0c…

vue模板语法上集->插值,指令,过滤器,计算属性监听属性,vue购物车

插值指令过滤器计算属性&监听属性vue购物车 1.插值 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script><script src&quo…

视频汇聚/视频云存储/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…

股指期权交割日大盘必跌吗?

股指期权交割日大盘必跌没有这一说法&#xff0c;股指期货的价格涨跌和交割日并无太大关系&#xff0c;临近交割日以后&#xff0c;股指价格和大盘趋于一致&#xff0c;如果价格相同的话&#xff0c;不存在下跌的可能性&#xff0c;下文揭秘股指期权交割日大盘必跌吗&#xff1…

面试算法8:和大于或等于k的最短子数组

题目 输入一个正整数组成的数组和一个正整数k&#xff0c;请问数组中和大于或等于k的连续子数组的最短长度是多少&#xff1f;如果不存在所有数字之和大于或等于k的子数组&#xff0c;则返回0。例如&#xff0c;输入数组[5&#xff0c;1&#xff0c;4&#xff0c;3]&#xff0…

部署大数据平台详细教程以及遇到的问题解答(ubuntu18.04下安装ambari2.7.3+HDP3.1.0)

节点准备: 我搭建的是3台,节点可以随意。建议最少是3台 hostname ip 角色 ubuntu-1804-1 172.21.73.53 从节点 ubuntu-1804-2 172.21.73.54 主节点 ubuntu-1804-3 172.21.73.55 从节点 一:关闭所有节点的防火墙 sudo ufw disable二:配置时钟同步NTP 所有节点安装ntp sud…

nodejs使用jsonwebtoken/jwt-decode生成jwt和解密token的方法

首先需要安装jsonwebtoken/jwt-decode依赖&#xff0c;这个就不用说了。 生成jwt的token&#xff0c;需要有一个加密用的salt&#xff0c;然后使用jwt.sign方法生成jwt token,具体如下&#xff1a; const jwt require("jsonwebtoken"); const jwtSalt "jasdo…

LinkedList相较于Arravlist的特点/优化

Arravlist底层是内存空间连续的数组&#xff0c;可以根据下标进行随机访问&#xff0c;效率比较高&#xff0c;因为在根据下标访问某一个元素时&#xff0c;并不是一个一个去查&#xff0c;而是算出来这个下标的地址&#xff0c;直接根据这个地址的指向去获取的&#xff0c;因为…

中国人民大学与加拿大女王大学金融硕士——在职读研,我们一起微笑前行

人生总有不期而遇的温暖&#xff0c;也有生生不息的希望。想要更好的生活&#xff0c;就先让生活看到最好的你。对于已经萌发在职读研的你&#xff0c;是否找到合适的院校呢&#xff1f;中国人民大学与加拿大女王大学金融硕士项目符合你的预期吗&#xff1f; 中国人民大学与加拿…

C++11的半同步半异步线程池

C11的半同步半异步线程池 简介同步队列Take函数Add函数Stop函数SyncQueue完整代码 线程池主函数测试 简介 半同步半异步线程池用的比较多&#xff0c;实现也比较简单。 其中同步层包括同步服务层和排队层&#xff0c;指的是将接收的任务排队&#xff0c;将所有的任务排队到一…

【数据分享】我国七普的乡镇(街道)人口数据(免费获取)

人口数据是我们在各项研究中都经常使用的数据&#xff01;人口数据的主要来源是人口普查&#xff0c;全国性的人口普查每十年进行一次。最近一次的人口普查是第七次全国人口普查&#xff0c;简称七普。七普统计的是2020年的人口数据。 之前我们分享过省市县三个层级的七普的人…

在业务和IT的视角中,MES管理系统有哪些重要性

在当今制造业中&#xff0c;MES生产管理系统已成为生产管理层面不可或缺的一部分。MES作为一款集成的软件解决方案&#xff0c;旨在连接企业的各个生产环节&#xff0c;实现生产计划、调度、执行和跟踪。本文将从业务和IT视角出发&#xff0c;探讨MES管理系统的重要性和实施细节…

PMP对项目管理工作有什么用?

首先&#xff0c;项目管理岗位基本是不限行业的&#xff0c;所以&#xff0c;只要是项目管理相关的岗位&#xff0c;pmp证书都是能起到效果的&#xff0c;不用担心局限性太大&#xff0c;而且&#xff0c;pmp证书是国际证书&#xff0c;无论国企还是外企&#xff0c;都是认可这…

go net/http 源码解读

回顾 1. HTTP Server 在 go 中启动一个 http server 只需短短几行代码 func PingHandler(w http.ResponseWriter, r *http.Request) {io.WriteString(w, "pong!") }func main() {http.HandleFunc("/ping", PingHandler)log.Fatal(http.ListenAndServe(&…

RocketMQ 源码分析——Producer

文章目录 消息发送代码实现消息发送者启动流程检查配置获得MQ客户端实例启动实例定时任务 Producer 消息发送流程选择队列默认选择队列策略故障延迟机制策略*两种策略的选择 技术亮点:ThreadLocal 消息发送代码实现 下面是一个生产者发送消息的demo&#xff08;同步发送&#…

Linux环境中数据误删除后恢复指导

一、背景 在很多Linux系统运维工作中&#xff0c;很多人会遇到敲错命令&#xff0c;或复制命令出错&#xff0c;或直接执行了rm -rf命令&#xff0c;事后才恍然大悟&#xff0c;闯下大祸&#xff0c;抛开问题&#xff0c;如果真的遇到这种情况&#xff0c;我们该如何应对呢&…

如何使用IP归属地查询API来追踪网络活动

引言 在当今数字化世界中&#xff0c;了解网络活动的源头和位置对于网络安全、市场研究和用户体验至关重要。IP归属地查询API是一种强大的工具&#xff0c;可以帮助您追踪网络活动并获取有关IP地址的重要信息。本文将探讨如何使用IP归属地查询API来追踪网络活动&#xff0c;以…

[C++ 网络协议] 多播与广播

目录 1. 多播 1.1 多播的使用情形 1.2 多播的原理 1.3 如何实现多播 1.4 多播的代码实现 2. 广播 2.1 广播与多播的区别 2.2 广播的分类 2.3 实现广播 1. 多播 1.1 多播的使用情形 考虑一种情形&#xff0c;你要向10000名用户发送数据&#xff0c;此时如果用TCP提供服…

MDPI模板报错的问题---提示缺少sty文件

MDPI模板报错的问题—提示缺少sty文件 平时大多数提交IEEE trans模板时大多使用CTEX编译&#xff0c;然而&#xff0c;MDPI模板需要用texlive&#xff0c;二者之间如果先安装CTEX后安装texlive将会导致库文件的冲突。结果将会报缺少sty的文件错。网上提供了很多解决方案&#…