Supadase是开源的。我们选择可扩展的开源工具,使其易于使用。
Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能,但我们不会以同样的方式进行:
我们的技术选择大不相同;我们使用的一切都是开源的;在任何可能的情况下,我们都使用和支持现有的工具,而不是从头开始开发。
最值得注意的是,我们使用Postgres而不是NoSQL存储。这个选择是经过深思熟虑的。我们相信,没有其他数据库能够提供与Firebase竞争所需的功能,同时保持超越Firebase所需的可扩展性。
选择您的舒适度#
我们在Suabase的目标是让所有的Postgres都易于使用。这并不意味着你必须使用所有的工具。如果你是一名研究生,你可能会喜欢我们提供的工具。如果你以前从未使用过Postgres,那就从小规模开始,慢慢发展。如果你只想把Postgres当作一个简单的表存储,那就太好了。
架构#
每个Subabase项目都由几个工具组成:
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更像是一个“社区社区”——每个工具通常都有自己的社区供我们使用。开源是我们合作的方式:我们雇佣维护人员,赞助项目,投资业务,并开发我们自己的开源工具。
- 登录 发表评论