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

文章目录

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

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

相关推荐
程序员卷卷狗25 分钟前
MySQL 页结构与数据存储原理全解析》
数据库·mysql
hweiyu0031 分钟前
MySQL 从入门到精通(视频教程)
数据库·mysql
小跌—35 分钟前
MySQL:数据库基础
数据库·mysql
张小洛1 小时前
Spring JDBC源码解析:模板方法模式的优雅实践
数据库·spring·模板方法模式·spring jdbc
SelectDB1 小时前
货拉拉用户画像基于 Apache Doris 的数据模型设计与实践
数据库·apache
weixin_387002151 小时前
漏洞修复学习之CVE-2024-10976漏洞复现
数据库·sql·学习·安全·postgresql
serendipity_hky1 小时前
【微服务 - easy视频 | day01】准备工具+gateway网关及路由至内部服务
java·微服务·架构·gateway·springcloud
芒果要切1 小时前
SQL笔试题(2)
数据库·sql
robin59111 小时前
Linux-通过端口转发访问数据库
linux·数据库·adb
懒羊羊不懒@2 小时前
【数据库 | 基础】DDL语句以及数据类型
数据库