图片
多租户(Multi-Tenancy)是一种架构模型,实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性,使它们共享相同的系统资源,但又能够在逻辑上彼此独立。在多租户架构中,租户可以是企业、组织或个人,它们之间共享同一应用的实例,但其数据和配置是隔离的。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离
传统软件模式:
SaaS模式:
图片
总的来说,传统软件模式注重客户对软件的购买和所有权,需要自行部署和维护;而SaaS模式则强调服务提供商通过云服务为客户提供方便、灵活的软件使用方式,降低了客户的部署和管理负担。选择使用哪种模式取决于企业的需求、预算和对定制化程度的要求。
在SaaS平台里需要使用共用的数据中心以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍可以保障客户的数据正常使用。由此带来了新的挑战,就是如何对应用数据进行设计,以支持多租户,而这种设计的 思路,是要在数据的共享、安全隔离和性能间取得平衡
目前基于多租户的数据库设计方案通常有如下三种:
在独立数据库方案中,每个租户拥有一个独立的数据库。每个数据库包含了相同的表结构,但是数据完全独立。这是一种高度隔离方案。
这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。由此可见此方案用户数据隔离级别最高,安全性最好,但是成本较高
oracle数据库:在oracle中一个数据库可以具有多个用户,那么一个用户一般对应一个Schema,表都是建立在Schema中的,(可以简单的理解:在oracle中一个用户一套数据库表)
图片
在 MySQL 中,"Schema" 和 "Database" 可以认为是相同的概念。在 SQL 语句中,"CREATE DATABASE" 和 "CREATE SCHEMA" 基本上是等效的。所以,当你创建一个数据库时,你也在事实上创建了一个模式。模式是一个逻辑上的容器,用于组织和管理数据库对象,如表、视图、存储过程等。在 MySQL 中,模式和数据库可以互换使用。
共享数据库、独立 Schema方案其实就是假如我在服务器上安装了一个mysql服务端,然后每一个用户就给他创建一个数据库database,这样多个用户就只需要创建多个database数据库即可,不需要像独立数据库方案一样每一个用户我就要去搭建一个mysql服务端
在共享数据库方案中,所有租户共享同一个数据库,但在每个表中添加一个租户ID字段,以区分不同租户的数据。这种方案需要确保所有查询都带上租户ID。
共享数据库、共享数据表和基于传统应用的数据库设计并没有任何区别,但是由于所有租户使用相同的数据库表,所以需要做好对每个租户数据的隔离安全性处理,这就增加了系统设计和数据管理方面的复杂程度。