文章目录
-
- 0.简介
- 1.多租户概念
-
- [1.1 基本概念](#1.1 基本概念)
- [1.2 单租户 vs 多租户](#1.2 单租户 vs 多租户)
- 2.实现方案
-
- [2.1 独立数据库方案](#2.1 独立数据库方案)
-
- [2.1.1 优点](#2.1.1 优点)
- [2.1.2 缺点](#2.1.2 缺点)
- [2.1.3 应用场景](#2.1.3 应用场景)
- [2.2 共享数据库,独立 Schema](#2.2 共享数据库,独立 Schema)
-
- [2.2.1 优点](#2.2.1 优点)
- [2.2.2 缺点](#2.2.2 缺点)
- [2.2.3 应用场景](#2.2.3 应用场景)
- [2.3 共享数据库、共享Schema、共享表](#2.3 共享数据库、共享Schema、共享表)
-
- [2.3.1 优点](#2.3.1 优点)
- [2.3.2 缺点](#2.3.2 缺点)
- [2.3.3 应用场景](#2.3.3 应用场景)
0.简介
随着Saas(软件即服务)的兴起,对于不同使用方资源如何隔离就是一个必须面对的问题,由此多租户概念开始被人所熟知,本文将从多租户的概念和三种实现方式来对其进行详细描述。
1.多租户概念
1.1 基本概念
多租户,就是单个软件实例可以为多个不同用户组提供服务的软件架构。在传统的应用中,资源仅仅去服务于一个租户,所有数据都是自己私有的;而扩展到SaaS场景,其在云端将分散计算资源,存储资源都整合到一起,让租户来共享这些资源,用户在享受低成本的同时,尽可能做到资源的隔离。所有对于多租户的设计方案,其实就是是要在数据的共享、安全隔离和性能间取得平衡。
1.2 单租户 vs 多租户
单租户架构下,对于每个租户都会有自己独立的系统实例,这样可以做到数据的独立和资源的隔离,但代价是成本的提升、系统维护和升级的复杂度的提升 ;而多租户架构下,多个租户共享资源,其可以显著的降低成本和维护升级的复杂性,但需要额外的隔离机制去保证资源的隔离和安全性。
2.实现方案
在多租户架构的设计中,数据库层的实现策略决定了系统的性能、隔离性和扩展性,其主流的三种主要的方案,分别是:1.独立数据库 2.共享数据库,独立 Schema 3.共享数据库,共享 Schema,共享数据表
2.1 独立数据库方案
这种方案是每个用户一个独立的数据库,其相比于传统的部署模式,只是将所有的实例使用租户来统一管理,其在三种方案中有着最好的隔离性,但也带来了更高的管理成本和复杂性,其详细示意图和优缺点如下:
2.1.1 优点
1)数据隔离性好,安全级别高;
2)容易定制,可以根据不同租户需求方便的进行调整。
3)数据恢复简单,只影响自己的服务。
2.1.2 缺点
1)成本高,资源利用率低。
2)跨租户统计数据困难。
3)管理复杂性高,每个租户一套,不方便统一管理。
2.1.3 应用场景
适用于定价高,租户不多,安全级别要求高的租户。
2.2 共享数据库,独立 Schema
这种方案是一种逻辑隔离方案,多个租户共享一个数据库实例,每个租户有自己的schema,也可以理解为一个命名空间,这是一种在数据隔离性和资源利用率上折中的方案,其示意图如下,可以看到,其和第一种相比,所有租户都在一个数据实例上。
2.2.1 优点
1)数据隔离性较好,虽然是同一个数据库实例,但其拥有自己的schema,数据相对独立
2)成本较低,共享数据库实例。
2.2.2 缺点
1)需要增加Schema的处理。
2)跨租户统计困难。
3)需要同时管理多个Schema,有一定管理复杂度。
2.2.3 应用场景
适用于数据规模中等,预算有限,租户数量中等的项目。
2.3 共享数据库、共享Schema、共享表
这种方式是一种全部共享的方式,所有租户共享一个数据库实例,同一个Schema,甚至是同一个表,每个表里有租户id来记录来自于那个租户,属于字段级别的逻辑隔离,其有着最高的资源利用率,但在安全性和隔离性上属于最低,其示意图及优缺点如下:
2.3.1 优点
1)成本低,资源利用率高。
2)跨租户容易统计。
3)理解最为简单。
2.3.2 缺点
1)安全性最差,隔离级别最低;需要配备严格的访问控制和验证机制。
2)对单个租户无法进行定制和扩展。
2.3.3 应用场景
适用于低成本,租户数量多,租户数据量小,对安全性和隔离级别要求低的产品。