多租户设计

多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。

多个租户在数据上既有共享又有隔离,常有的存储方式有以下三种:

方案一:独立数据库
方案二:共享数据库,隔离数据架构
方案三:共享数据库,共享数据架构

独立数据库

独立数据库即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。

这种模式下,我们可以为不同的租户提供独立的数据库,针对不同用户的独特需求扩展方便,数据备份以及修复比较简单。但是这种方案增多了数据库的数量,维护成本和购置成本高。

共享数据库,隔离数据架构

共享数据库,隔离数据架构即多个或所有租户共享Database,但是每个租户一个Schema。

该模式为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。

但是该模式下,如果数据库出现故障,数据恢复比较困难,因为数据库的恢复会牵扯到其他租户的数据;如果需要跨租户统计数据,存在一定困难。

共享数据库,共享数据架构

第三种方案,即租户共享同一个Database、同一个Schema,但在表中增加TenantID多租户的数据字段。这是共享程度最高、隔离级别最低的模式。

这种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。

但是这种隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量;同时数据备份和恢复最困难,需要逐表逐条备份和还原。

如果希望以最少的服务器为最多的租户提供服务,并且租户接受牺牲隔离级别换取降低成本,这种方案最适合。

如何选择

我们要如何选择这三种模式呢?衡量三种模式主要考虑的因素是隔离还是共享,还有成本。

考虑到成本角度因素:隔离性越好,设计和实现的难度和成本越高,初始成本越高。共享性越好,同一运营成本下支持的用户越多,运营成本越低。

安全因素:要考虑业务和客户的安全方面的要求。安全性要求越高,越要倾向于隔离。

从租户数量上考虑:租户越多,应该越倾向于共享;如果每个租户存储的数据越多,应该越倾向于隔离;每个租户同时访问系统的用户数量越多,应该越倾向于隔离;如果针对每个用户都要提供一些附加服务,就应该越倾向于隔离。

信息监管因素:要考虑政府,机关,企业,公司的安全和信息监管相关的一些政策和规定。

技术储备:共享性越高,对技术的要求越高。


参考:

【架构】如何设计支持多租户的数据库?

SaaS多租户数据隔离的三种方案

数据层的多租户浅谈