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

2023-12-02 07:12

本文主要是介绍【开发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架构 | 程序员云开发,云时代的程序员.

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

这篇关于【开发PaaS】基于Postgresql的开发平台Supabase的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/444429

相关文章

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t