PostgreSQL多租户按地域的分布式架构设计
jf wang Lv7

设计目标

  • 按用户所在地把用户按区域分组,将同一个区域的用户数据集中在当地的数据库中。
  • 数据要按时间分表。能按月或按年,方便地处理数据,也能提高查询效率。
  • 数据要集中化管理。不能把业务数据弄到不同的库中。最终要有个库中包括平台的所有数据。

设计

服务实例设计

graph LR
master[(主库)]
master-standby[(主库后备库)]
bj-item[(北京区域库)]
bj-item-standby[(北京区域后备库)]
sh-item[(上海区域库)]
sh-item-standby[(上海区域后备库)]

master -- 逻辑复制 --> bj-item
master -- 逻辑复制 --> sh-item
master -- 流复制 --> master-standby
bj-item -- 流复制 --> bj-item-standby
sh-item -- 流复制 --> sh-item-standby

数据库结构设计

graph LR
db[(主数据库)]
db --- public
db --- beijing
db --- shanghai

subgraph schema public
public --- public.table-a
public --- public.table-b
end

subgraph schema bejing
beijing --- beijing.table-a
beijing --- beijing.table-b
beijing.table-a --- beijing.table-a-2020-01
beijing.table-a --- beijing.table-a-2020-02
beijing.table-b --- beijing.table-b-2020-01
beijing.table-b --- beijing.table-b-2020-02
end

subgraph schema shanghai
shanghai --- shanghai.table-a
shanghai --- shanghai.table-b
shanghai.table-a --- shanghai.table-a-2020-01
shanghai.table-a --- shanghai.table-a-2020-02
shanghai.table-b --- shanghai.table-b-2020-01
shanghai.table-b --- shanghai.table-b-2020-02
end

beijing.table-a -. 继承 .-> public.table-a
beijing.table-b -. 继承 .-> public.table-b

shanghai.table-a -. 继承 .-> public.table-a
shanghai.table-b -. 继承 .-> public.table-b

shanghai -. 逻辑复制 .-> sh-db[(上海地域数据库)]
beijing -. 逻辑复制 .-> bj-db[(北京地域数据库)]

sh-db -- 流复制 --> sh-db-standby[(上海区域后备库)]
bj-db -- 流复制 --> bj-db-standby[(北京区域后备库)]

设计缺陷

  • 地域之间的数据迁移
  • 地域数据分裂(比如:把上海地区数据库的数据,分裂成:上海、杭州两个子地区)
  • 本文标题:PostgreSQL多租户按地域的分布式架构设计
  • 本文作者:jf wang
  • 创建时间:2022-06-27 11:32:33
  • 本文链接:https://www.wangjunfeng.com.cn/2022/06/27/postgresql-multi-tenancy-distributed-geographically/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!