Skip to content

多租户数据隔离设计

前文:云服务模式及多租户基础中提到,目前saas多租户系统的数据隔离有三种解决方案,即为每个租户提供独立的数据库、独立的表空间、按字段区分租户,每种方案都有其各自的适用情况,这边对三种不同的方式进行讨论

Untitled

独立数据库

每个租户都使用独立的数据库,这种方案类似于传统的部署,其区别在于多租户的实现是将每个租户的数据库都统一管理起来。这种一租户一数据库的方案优缺点都很明显

优点

  • 数据隔离性好,安全等级高
  • 数据库表不需要额外的字段来区分租户
  • 需求扩展独立性好,不影响其他租户使用
  • 出现故障时,恢复数据相对简单

缺点

  • 增加了数据库的安装数量和安装成本
  • 支持租户的数量有限
  • 跨租户统计数据相对较难
  • 新增租户需要重启服务

该方案适用于定价高,安全级别要求高的租户。例如,银行、医院等对数据隔离性有严格要求的租户。这些租户的特点是租户较少,数据规模大,数据隔离性强

共享数据库,独立Schema

每个租户共享同一个数据库,但使用的是不同的Schema。像Oracle和PgSql都支持一个数据库下多个Schema。

优点

  • 数据隔离性较好。为每个租户提供了一定程度上的逻辑隔离;
  • 相较于独立数据库方案,可以支持的租户数量更多;
  • 安装成本相对较低。

缺点

  • 跨租户统计数据较困难;
  • 各个租户的数据库sql需要带上Schema名称。

适用于数据规模中等,租户数量中等的项目。

共享数据库、共享Schema、共享表

每个租户共享同一个数据库,同一个Schema,甚至是同一张表。每个表里都有一个tenant_id字段用来区分表里的记录是来自于哪一个租户。这种多租户方案是三个方案里隔离级别最低但是共享程度最高的一个。

优点

  • 安装成本最低;
  • 支持的租户数量最多;
  • 添加租户不需要重启服务;
  • 跨租户统计较容易。

缺点

  • 安全性最差,隔离级别最低;
  • 维护成本最高。其成本体现在表设计需要额外字段,sql代码需要额外查询条件,故障后数据恢复需要额外操作;
  • 每个租户的数据量规模不宜较大。

Untitled

最后更新于: