当前位置: 首页 > news >正文

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

相关文章:

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

Supabase是什么 Supabase将自己定位为Firebase的开源替代品,提供了一套工具来帮助开发者构建web或移动应用程序。Supabase是建立在Postgres之上的,Postgres是一个免费的开源数据库,被认为是世界上最稳定、最先进的数据库之一。Supabase对标F…...

Github主页无法打开和Assets转圈

1、cmd启动命令行 2、github.com打不开,多刷新几遍。等成功打开时,命令行输入nslookup github.com,把非权威应答下的IP地址复制到C:\Windows\System32\drivers\etc\hosts里,如查到的IP是192.30.255.112,则填写 192.30.255.112 gi…...

rm误删文件恢复

rm误删文件恢复 问题描述安装extundeleteyum安装extundelete编译安装extundelete 常用参数动作(action): 尝试数据恢复前置条件卸载磁盘分区查看被删除数据信息 恢复文件恢复指定inode号文件恢复指定文件名恢复指定目录恢复所有可恢复文件恢复指定时间的文件恢复指定…...

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 (Multiprocessing)2、多线程(Multithreading)3、协程(Coroutine) 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …...

Cython 笔记 (Python/Jython)

目录 1. Cython 笔记 (Python)2. python 加速库 cython 简介2.1. Cython 是什么?2.2. 如何安装 Cython?2.3. 简单示例2.4. 性能比对2.5. 总结 3. PYTHON, CYTHON, JYTHON, IRONPYTHON 的区别 (注意: 此篇有误导,表述不一定正确,只提供一个方向)3.1. PY…...

[React] react-hooks如何使用

react-hooks思想和初衷,也是把组件,颗粒化,单元化,形成独立的渲染环境,减少渲染次数,优化性能。 文章目录 1.为什么要使用hooks2.如何使用hooks2.1 useState2.2 useEffect2.3 useLayoutEffect2.4 useRef2.5…...

多个pdf合并成一个文件,3个方法合并pdf

如何把多个pdf合并成一个文件?在我们日常的工作中,经常会遇到一些需要处理的文件,其中包括PDF文件。特别是当我们需要将多个PDF文件合并成一个PDF文件时,会面临一些困难。这样的情况下,我们的阅读能力会受到限制&#…...

代码随想录 动态规划Ⅸ

198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…...

【数据结构】散列表(哈希表)的学习知识总结

目录 1、散列表 2、散列函数 2.1 定义 2.2 散列函数的构造 2.2.1 除留余数法 2.2.2 直接定址法 2.2.3 数字分析法 2.2.4 平方取中法 3、冲突(碰撞) 4、处理冲突的方法 4.1 拉链法(链接法) 4.2 开放定址法 5、C语言…...

2023智慧云打印小程序源码多店铺开源版 +前端

智慧自助云打印系统/智慧云打印小程序源码 前端 这是一款全新的基于Thinkphp的最新自助打印系统,最新UI界面设计的云打印小程序源码...

利用亚马逊 云服务器 EC2 和S3免费套餐搭建私人网盘

网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度&#xff0…...

数据分析技能点-数据的种类

在日常生活中,数据无处不在。当你去超市购物时,你可能会注意到商品的价格、重量、口味等;当你在社交媒体上浏览时,你可能会注意到好友的点赞数、评论等。这些都是数据的一种形式,而了解这些数据的种类和特点有助于我们更好地理解和使用它们。 数据的基本分类 数据大致可…...

解读:ISO 14644-21:2023《洁净室及相关受控环境:悬浮粒子采样》发布指导粒子采样!

药品洁净实验室环境监测结果是否满足微生物检测需求,直接决定检测结果的有效性准确性,进行药品微生物检测,必须对实验环境进行日常和定期监测,其内容包括非生物活性的空气悬浮粒子数及有生物活性的微生物监测。 悬浮粒子监测是保证…...

Java --- MySQL8之索引优化与查询优化

目录 一、索引失效场景 1.1、全值匹配 1.2、最佳左前缀规则 1.3、主键插入顺序 1.4、计算、函数、类型转换(自动或手动)导致索引失效 1.5、类型转换导致索引失效 1.6、范围条件右边的列索引失效 1.7、不等于(! 或者<>)索引失效 1.8、is null可以使用索引&…...

澳大利亚新版《2023年消费品(36个月以下儿童玩具) 安全标准》发布 旨在降低危险小零件的伤害

2023年9月4日&#xff0c;澳大利亚政府发布了新的儿童玩具强制性安全标准《2023年消费品(36个月以下儿童玩具)安全标准》&#xff08;Consumer Goods (Toys for Children up to and including 36 Months of Age) Safety Standard 2023&#xff09;。该强制性标准旨在尽可能地降…...

表格内日期比较计算

需求&#xff1a;在表格中新增数据&#xff0c;计算开始日期中最早的和结束日期中最晚的&#xff0c;回显到下方。 <el-formref"formRef":model"ruleForm":rules"rules"style"margin-top: 20px;"label-position"top">…...

Linux内核启动流程-第二阶段start_kernel 函数

一. Linux内核启动 上一篇文章简单介绍了 Linux内核启动的第一阶段&#xff0c;即执行汇编流程。 本文简单了解一下&#xff0c;Linux内核启动的第二阶段&#xff1a;start_kernel函数&#xff0c;这是一个 C 函数。 本文续上一篇文章的学习&#xff0c;地址如下&#xff1a;…...

Disruptor:无锁队列设计的背后原理

简介 在高并发场景下&#xff0c;队列的速度和效率是关键。而Disruptor&#xff0c;一种高性能的并发队列&#xff0c;通过独特的设计&#xff0c;解决了传统队列在处理高并发时可能遇到的性能瓶颈。本文将深入分析Disruptor如何通过环形数组结构、元素位置定位以及无锁设计&a…...

网络编程-UDP协议(发送数据和接收数据)

需要了解TCP协议的&#xff0c;可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 TCP/IP参考模型 通过此图&#xff0c;可以了解UDP所在哪一层级中 代码案例 发送数据 package com.hidata.devops.paas.udp;import java.io.IOException; …...

AI绘画普及课【一】绘画入门

文章目录 一、AI 绘画入门1、Stable Diffusion VS. MidJourney2、Stable Diffusion 介绍3、Stable Diffusion 环境搭建4、文生图与图生图 一、AI 绘画入门 1、Stable Diffusion VS. MidJourney Midjourney 优点: 操作简单、出图绚丽多彩 缺点: 订阅付费充钱 内容有限制&a…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...