由 Tudor Golubenco 提供的用于多租户应用程序的地理分布式 Postgres

主要观点:

  • 介绍将 Postgres 数据库分发到多个区域或云的模式,可通过管理服务或自托管实现,不依赖标准 Postgres 安装之外的功能。
  • 该模式包括分离租户数据表和控制平面表,将租户数据放在靠近用户的区域,使用 Postgres 外部数据包装器(FDW)和分区创建全局视图,控制平面数据放在单个区域。
  • 此模式适用于数据模型可按特定键分段为“租户”且每个租户对特定区域有自然“亲和性”的情况,如 B2B 多租户 SaaS 应用。
  • 控制平面数据在单个中心区域,租户数据分布到有亲和性的区域,通过 JWT 等进行认证,可在每个区域部署应用栈或在边缘平台运行。
  • 可使用 FDW 和分区创建全局视图来查询或聚合多个租户的数据,但存在性能影响和跨区域写事务非 ACID 等限制。
  • 未来随着 Postgres FDW、分区和规划器的改进,全局视图将更高效,有望无需使用 Citus 等扩展实现分布式 Postgres,作者所在团队也在为此努力并通过 newsletter 分享进展。

关键信息:

  • 模式步骤:分离表、放置数据、创建视图、控制平面数据位置等。
  • 适用条件:数据可分段为租户且租户有区域亲和性。
  • 数据分布方式:为每个区域创建租户数据表。
  • 全局视图创建:使用 FDW 和分区,在控制器节点或数据节点创建。
  • 限制:性能慢、跨区域写事务非 ACID。
  • 未来发展:改进后使模式更适用广泛应用,团队在努力推进。

重要细节:

  • 以 Notion 克隆为例说明数据模型和租户概念。
  • 提及不同场景下使用该模式的原因,如降低延迟、满足数据驻留法律等。
  • 说明生成全局唯一 ID 的方法。
  • 给出创建全局视图的具体命令和操作。
阅读 11
0 条评论