【开发PaaS】基于Postgresql的开发平台Supabase

Supadase是开源的。我们选择可扩展的开源工具,使其易于使用。

Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能,但我们不会以同样的方式进行:

我们的技术选择大不相同;我们使用的一切都是开源的;在任何可能的情况下,我们都使用和支持现有的工具,而不是从头开始开发。

最值得注意的是,我们使用Postgres而不是NoSQL存储。这个选择是经过深思熟虑的。我们相信,没有其他数据库能够提供与Firebase竞争所需的功能,同时保持超越Firebase所需的可扩展性。

选择您的舒适度#

我们在Suabase的目标是让所有的Postgres都易于使用。这并不意味着你必须使用所有的工具。如果你是一名研究生,你可能会喜欢我们提供的工具。如果你以前从未使用过Postgres,那就从小规模开始,慢慢发展。如果你只想把Postgres当作一个简单的表存储,那就太好了。

架构#

每个Subabase项目都由几个工具组成:

supabase-architecture

PostgreSQL (Database)#

PostgreSQL是Suabase的核心。我们不抽象PostgreSQL数据库——您可以访问它并以完全权限使用它。我们只是提供一些工具,使PostgreSQL像Firebase一样易于使用。

  • Official Docs: postgresql.org/docs
  • Source code: github.com/postgres/postgres (mirror)
  • License: PostgreSQL Licence
  • Language: C

Studio (Dashboard)#

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

  • Official Docs: Supabase docs
  • Source code: github.com/supabase/supabase
  • License: Apache 2
  • Language: TypeScript

GoTrue (Auth)#

基于JWT的API,用于管理用户和发布访问令牌。这集成了PostgreSQL的行级安全和API服务器。

  • Official Docs: Supabase Auth reference docs
  • Source code: github.com/supabase/gotrue
  • License: MIT
  • Language: Go

PostgREST (API)#

一个独立的web服务器,可以将PostgreSQL数据库直接转换为RESTful API。我们将其与pg_graphql扩展一起使用,以提供graphql API。

  • Official Docs: postgrest.org
  • Source code: github.com/PostgREST/postgrest
  • License: MIT
  • Language: Haskell

Realtime (API & multiplayer)#

一个可扩展的websocket引擎,用于管理用户状态、广播消息和流式数据库更改。

  • Official Docs: Supabase Realtime docs
  • Source code: github.com/supabase/realtime
  • License: Apache 2
  • Language: Elixir

Storage API (large file storage)#

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

  • Official Docs: Supabase Storage reference docs
  • Source code: github.com/supabase/storage-api
  • License: Apache 2.0
  • Language: NodeJS / TypeScript

Deno (Edge Functions)#

JavaScript和TypeScript的现代运行时。

  • Official Docs: deno.land
  • Source code: github.com/denoland/deno
  • License: MIT
  • Language: TypeScript / Rust

postgres-meta (Database management)#

一个RESTful API,用于管理您的postgres。获取表、添加角色和运行查询。

  • Official Docs: supabase.github.io/postgres-meta
  • Source code: github.com/supabase/postgres-meta
  • License: Apache 2.0
  • Language: NodeJS / TypeScript

PgBouncer#

PostgreSQL的轻量级连接池。当使用无服务器函数时,这对于连接到Postgres非常有用。

  • Official Docs: pgbouncer.org
  • Source code: pgbouncer/pgbouncer
  • License: ISC
  • Language: C

Kong (API Gateway)#

一个云原生的API网关,建立在Nginx之上。

  • Official Docs: docs.konghq.com
  • Source code: github.com/kong/kong
  • License: Apache 2.0
  • Language: Lua

产品原理#

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

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

一切都是孤立的#

每个系统都必须作为一个独立的工具,尽可能少地使用移动部件。对此的试金石是:“用户能在只有Postgres数据库的情况下运行这个产品吗?”

一切都是一体化的#

苏巴斯是可堆肥的。尽管每个产品都是孤立工作的,但平台上的每个产品都需要是其他产品的10倍。对于集成,每个工具都应该公开一个API和Webhook。

一切都是可扩展的#

我们正在考虑添加一个新工具,而更倾向于扩展现有工具。这与许多云提供商的产品扩展到利基用例正好相反。我们为开发人员提供原语,使他们能够实现任何目标。少,但更好。

一切都是便携的#

为了避免锁定,我们使迁移进出变得容易。我们的云产品与我们的自托管产品兼容。我们使用现有的标准来提高可移植性(如pg_dump和CSV文件)。如果出现了一个与“Subasse”方法相竞争的新标准,我们将反对该方法而支持该标准。这迫使我们在经验上竞争。我们的目标是成为最好的Postgres托管服务。

关注长期

我们牺牲短期胜利换取长期收益。例如,运行一个Postgres的分支,它具有只有我们的客户需要的额外功能,这是很诱人的。相反,我们更愿意支持上游缺失功能的努力,从而使整个社区受益。这还有确保便携性和使用寿命的额外好处。

为开发人员构建#

“开发人员”是一个特定的用户档案:他们是建设者。当将影响作为工作的函数进行评估时,由于开发人员可以构建的产品和系统的类型,他们有很大的效率。随着开发人员的配置文件随着时间的推移而变化,Suabase将继续开发产品以适应这种不断发展的配置文件。

支持现有工具#

Suabase尽可能支持现有的工具和社区。Suabase更像是一个“社区社区”——每个工具通常都有自己的社区供我们使用。开源是我们合作的方式:我们雇佣维护人员,赞助项目,投资业务,并开发我们自己的开源工具。

文章链接

【PaaS】Supabase架构 | 程序员云开发,云时代的程序员.

欢迎收藏【架构师酒馆】和【开发者开聊】

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

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

相关文章

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明,以及一些注意事项,为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

L1-009:N个数求和

目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。 输入格式: 输入第一行给出…

【Python表白系列】制作一个无法拒绝的表白界面(完整代码)

文章目录 无法拒绝的表白界面环境需求完整代码详细分析系列文章 无法拒绝的表白界面 当点击“不要”时弹出 当点击“”时弹出 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有…

.net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法

文章目录 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法详细报错内容解决方案修改数据修改表修改字段 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法 详细报错内容 System.NotSupportedException…

从图片或PDF文件识别表格提取内容的简单库img2table

img2table是一个基于OpenCV 图像处理的用于 PDF 和图像的表识别和提取 Python库。由于其设计基于神经网络的解决方案,提供了一种实用且更轻便的替代方案,尤其是在 CPU 上使用时。 该库的特点: 识别图像和PDF文件中的表格,包括在表…

富文本内容回显

<el-card><h7>正文内容</h7><template><div v-html"inputForm.bulletinData"></div></template></el-card> 通过 v-html 来回显数据

Robotframework自动化常见问题总结

Robotframework自动化新手常见问题总结 1. 经常有人问这个元素找不到&#xff0c;一般先排除这两个地方&#xff0c;再自己找找 A&#xff1a;是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx) B: 仔细查查&#xff0c;这个元素是否进入到另一个frame了 (sel…

Leetcode—392.判断子序列【简单】

2023每日刷题&#xff08;四十七&#xff09; Leetcode—392.判断子序列 双指针实现代码 bool isSubsequence(char* s, char* t) {int lens strlen(s);int lent strlen(t);int left 0, right 0;if(lens 0) {return true;}while(right < lent) {if(t[right] s[left])…

用户反馈组件实现(Vue3+ElementPlus)含图片拖拽上传

用户反馈组件实现&#xff08;Vue3ElementPlus&#xff09;含图片拖拽上传 1. 页面效果1.1 正常展示1.2 鼠标悬浮1.3 表单 2. 代码部分1.2 html、ts1.2 less部分 3. 编码过程遇到的问题 1. 页面效果 1.1 正常展示 1.2 鼠标悬浮 1.3 表单 2. 代码部分 1.2 html、ts <templ…

Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制&#xff0c;MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff1b;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

骨传导会损伤听力吗?戴哪种耳机不伤耳朵?

使用骨传导耳机不会损伤听力&#xff0c;反而还能在一定程度上保护听力&#xff01; 骨传导耳机最大的特点是&#xff0c;声波不经过外耳道和骨膜中的空气进行传播&#xff0c;而是直接将人体骨骼结构作为传声介质来进行传播。 在使用骨传导耳机时&#xff0c;骨传导耳机的声源…

Python标准库math【侯小啾python领航班系列(十六)】

Python标准库math【侯小啾python领航班系列(十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…

学生备考护眼灯哪个牌子好?值得入手的护眼台灯推荐

护眼台灯作为这几年人们很关注的电器产品&#xff0c;家里有孩子或者是经常面对电子设备的人士&#xff0c;相信都会对其有所了解并且购买了护眼台灯&#xff0c;但是还有些家长对护眼台灯的认知不够深&#xff0c;以至于还没有给孩子安排上护眼台灯&#xff0c;还在疑惑护眼台…

FlowJo软件的简单介绍 掌控流式细胞分析的科技巨匠 FlowJo10

FlowJo 10 for Mac是一款强大的流式细胞数据分析软件&#xff0c;具有以下功能&#xff1a; 数据导入与预处理&#xff1a;FlowJo 10可以轻松导入各种类型的流式细胞数据&#xff0c;并对数据进行预处理&#xff0c;包括去噪、背景校正等&#xff0c;以确保数据的准确性和可靠…

小小窗户,在风水中有大大的作用

风水&#xff0c;不是迷信&#xff0c;是环境科学&#xff0c;是地磁学。过去大户人家&#xff0c;官府都是很注重风水的。现在&#xff0c;越是往社会上层越是注重风水。在实际的家居风水之中&#xff0c;要想生旺气场&#xff0c;增加财运&#xff0c;风水纳气一定要充足。 自…

CCC联盟数字车钥匙(七)——BLE连接流程

本文接上一篇CCC数字钥匙BLE概述&#xff0c;介绍BLE中相关连接流程的实现。 2、BLE流程 2.1 所有者配对连接建立 CCC中使用Bluetooth OOB&#xff08;Out of Band, 带外&#xff09;配对完成所有者配对、连接建立的流程。BLE设置分为以下两个子部分&#xff1a; BLE链路层连…

UI自动化Selenium find_elements和find_element的区别

# 如果获取的element是list&#xff0c;那么需要用find_elements方法&#xff1b;此方法会返回list&#xff0c;然后使用len() 方法&#xff0c;计算对象的个数&#xff1b; # find_element方法返回的不是list对象&#xff0c;所以导致没办法计算对象个数 # 1.返回值类型不同…

oops-framework框架 之 初始了解(一)

引擎&#xff1a;CocosCreator 环境&#xff1a; Mac Gitee: oops-framework 简介 oops-framework是由作者dgflash编写&#xff0c;基于CocosCreator 3.x而实现的开源框架。 该框架以插件形式存在&#xff0c;主要目的是为了降低与项目的耦合&#xff0c;并且通过插件内部的…