主要观点:
- 介绍将 Postgres 数据库分发到多个区域或云的模式,可通过管理服务或自托管实现,不依赖标准 Postgres 安装之外的功能。
- 该模式包括分离租户数据表和控制平面表,将租户数据放在靠近用户的区域,使用 Postgres 外部数据包装器(FDW)和分区创建全局视图,控制平面数据放在单个区域。
- 此模式适用于数据模型可按特定键分段为“租户”且每个租户对特定区域有自然“亲和性”的情况,如 B2B 多租户 SaaS 应用。
- 控制平面数据在单个中心区域,租户数据分布到有亲和性的区域,通过 JWT 等进行认证,可在每个区域部署应用栈或在边缘平台运行。
- 可使用 FDW 和分区创建全局视图来查询或聚合多个租户的数据,但存在性能影响和跨区域写事务非 ACID 等限制。
- 未来随着 Postgres FDW、分区和规划器的改进,全局视图将更高效,有望无需使用 Citus 等扩展实现分布式 Postgres,作者所在团队也在为此努力并通过 newsletter 分享进展。
关键信息:
- 模式步骤:分离表、放置数据、创建视图、控制平面数据位置等。
- 适用条件:数据可分段为租户且租户有区域亲和性。
- 数据分布方式:为每个区域创建租户数据表。
- 全局视图创建:使用 FDW 和分区,在控制器节点或数据节点创建。
- 限制:性能慢、跨区域写事务非 ACID。
- 未来发展:改进后使模式更适用广泛应用,团队在努力推进。
重要细节:
- 以 Notion 克隆为例说明数据模型和租户概念。
- 提及不同场景下使用该模式的原因,如降低延迟、满足数据驻留法律等。
- 说明生成全局唯一 ID 的方法。
- 给出创建全局视图的具体命令和操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。