详解多租户架构下的资源隔离模式

文章目录

    • 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 应用场景

适用于低成本,租户数量多,租户数据量小,对安全性和隔离级别要求低的产品。

相关推荐
爱潜水的小L19 小时前
自学嵌入式day41,数据库
jvm·数据库
橙汁味的风19 小时前
《数据库系统概论》陈红、卢卫 - 9 - 关系数据库存储管理
数据库·数据库系统概论
catchadmin19 小时前
CatchAdmin 2025 年终总结 模块化架构的进化之路
架构·php·开源软件
最贪吃的虎19 小时前
Redis 除了缓存,还能干什么?
java·数据库·redis·后端·缓存
u01316355119 小时前
Oracle 报错:PLS-00201: 必须声明标识符‘DBMS_LOCK‘的解决方法
数据库·oracle
乾元19 小时前
Network-as-Code:把 HCIE / CCIE 实验脚本转为企业级 CI 工程化流程
运维·网络·人工智能·安全·web安全·ai·架构
Awkwardx19 小时前
MySQL数据库—MySQL数据类型
数据库·mysql
郑泰科技19 小时前
hbase 避坑F:\hbase\hadoop\sbin>start-dfs.cmd 系统找不到文件 hadoop。
大数据·数据库·hadoop·hdfs·hbase
微爱帮监所写信寄信19 小时前
微爱帮监狱寄信写信小程序PHP底层优化框架
java·开发语言·数据库·spring·微信·php·mybatis
郑泰科技19 小时前
hbase避坑:Hadoop 的 NameNode 找不到指定的存储目录
数据库·hadoop·hbase