背景

在以往传统的项目中,我们一般地是面向特定的客户实现一套特定的系统,并部署到对应的企业内部中。不同的企业或组织各自部署一套自己的软件系统。而现在面向ToB端的SaaS模式,是将一套软件服务部署到云端或特定服务环境中,面向不同的企业或组织提供相同的服务。这也很符合目前“轻资产”的模式。

就像代码无非是算法+数据结构,那么软件无非是功能+数据,多租户其实就是功能共享,数据隔离。这是一种架构模式,在设计过程中需要注意很多东西。

模型

一般地,以支持多租户的运行技术总体可分为三种:独立数据库、共享数据库但独立Schema、共享数据库且共享数据表。他们各自又存在各自的优劣性。

  1. 独立数据库。
    1. 优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,数据影响小、恢复数据比较简单。
    2. 缺点:增多了数据库的安装数量,随之带来维护成本和购置成本的增加这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。由此可见此方案用户数据隔离级别最高安全性最好,但是成本较高。
  2. 共享数据库,独立schema。
    1. 优点:对于安全性要求较高的租户,是一种选择。提供了一定程度的逻辑数据隔离,但并不是完全隔离;每个数据库可支持更多的租户数量。
    2. 缺点:如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据;如果需要跨租户统计数据,存在一定困难。这种方案是方案一的变种。只需要安装一份数据库服务,通过不同的Schema对不同租户的数据进行隔离。由于数据库服务是共享的,所以成本相对低廉。
  3. 共享数据库,共享表,采用不同租户ID。
    1. 优点:所有租户使用同一套数据库,所以成本低廉;能够简单进行数据聚合统计或分析。
    2. 缺点:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量,数据备份和恢复最困难。