SaaS平台多租户模式数据库设计方案

 

----多租户技术,是一种架构模式,是实现如何在多用户环境下共用相同的系统或程序组件,并且达到各用户间数据的“独立”的技术

--- 解决问题:在SaaS平台中,注重的就是数据的“独立性”,也就是隔离性。如何在共有的一套系统架构与服务,仍可以保障客户的数据相对独立的正常使用。

 

  • 支持多租户的运行技术总体分三种:

    • 独立数据库

      • 针对独立数据库的这种方式,首先需要业务层能够支持多数据源的配置,并且为每个租户创建或初始化一个数据库。应用程序和数据库都是独立的实例,因此它不会与任何其他独立实例交互。只为一个租户提供服务,拥有独立的服务、独立的数据库以及独立的请求处理。

        • 优点:

          为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,数据影响小、恢复数据比较简单。

        • 缺点:

          增多了数据库的安装数量,随之带来维护成本和购置成本的增加这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。由此可见此方案用户数据隔离级别最高安全性最好,但是成本较高。

    • 共享数据库但独立Schema

      • 共享数据库,独立的Schema模式,是将多个或所有租户的数据放在一个数据库服务中,但是为每一个租户建立一个独立的Schema。租户之间数据彼此逻辑不可见。上层应用程序的实现和独立数据库一样简单(MySQL中的Schema比较特殊,并不是数据库的下一级,而是等同与数据库)

        • 优点:对于安全性要求较高的租户,是一种选择。提供了一定程度的逻辑数据隔离,但并不是完全隔离;每个数据库可支持更多的租户数量。

        • 缺点:如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据;如果需要跨租户统计数据,存在一定困难。这种方案是方案一的变种。只需要安装一份数据库服务,通过不同的Schema对不同租户的数据进行隔离。由于数据库服务是共享的,所以成本相对低廉。

    • 共享数据库且共享数据表

      • 共享数据库、共享数据表,指的是多个或所有租户共享同一个数据库(Database)。所有的租户数据都存在同一个数据和同一套表中。通过数据库或表设计的租户ID租户标志字段,来表明该记录是属于哪个租户的。

        • 优点:所有租户使用同一套数据库,所以成本低廉;能够简单进行数据聚合统计或分析。

        • 缺点:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量,数据备份和恢复最困难。

      • 实现: 1. 为了租户能否方便的访问,以及平台能自动识别访问是哪个租户,在接入层采用通过url来识别租户,即系统在初始化租户信息时,会随机生成一个租户编码(租户编码允许修改一次),用于saas平台的三级域名监听,通过在业务系统的处理和绑定,当接收到请求时,拦截器会自动识别对应的租户编码,并加载对应的租户信息。 2. 在业务处理时,租户标识编号作为必须条件带入,进行数据操作。这里可以拓展下。目前在构建时,我们预留了分库分表的处理策略。当我们的用户量和业务所产生的数据呈现线性增长模式时,采用一般性的单数据库或者读写分离已经远远不能满足访问性能的要求了。加上我们在很多微应用上采用的是一个数据库的原则。数据库的IO将是一个直接面临的问题。所以我们已经预留了按照租户分库的策略。 3. 如果需要执行某个租户的信息,那么Sql必须要加上租户的唯一标识条件,且放在第一位条件。

 

 

SaaS平台多租户模式数据库设计方案

上一篇:.Net Core使用NLog记录日志到文件和数据库实战演练


下一篇:SQL Server数据库高级进阶之分布式唯一ID生成实战演练