数据库多租户实现三种方式

news/2024/7/9 21:05:26 标签: 数据库, postgresql, mysql, oracle

1960年,许多公司需要使用更多的运算资源,向持有Mainframe的供应商租用运算资源。与此同时,Mainframe的供应商会根据用户登录系统时输入的数据匹配ID,利用ID来计算运算的资源使用量,包含CPU,存储器,软盘或磁带等,此种做法也被SAP公司用在其部分产品线中。

1990年,应用程序服务提供者(application service provider)服务的作法、运作模式与租用大型主机相同,但前者租用的是服务器资源,而后者租用的是软件上的操作系统和应用程序资源,比如:ERP、CRM等应用,系统可能会运行在多台不同的机器上,或是在相同的主机但共享不同的数据库,以区分并计算客户的资源使用量,以此作为计费的标准,而此技术也有效地缩减供应商的实体机器成本。

现在,Web应用程序也是以单一应用程序平台来支持所有用户的,这已经是多租户技术的自然演化的结果,多租户技术也可以让客户中的一部分用户得以进一步定制化他们的应用程序。

在虚拟化(virtualization)技术的成熟与应用性的扩张之下,多租户技术在虚拟化的平台更强化在用户应用程序和数据之间的隔离,让多租户技术能更加发挥它的特色。

定义

多租户技术是指实现了多个企业租户共享同一个应用实例的技术。

实现方式

多租户技术的实现难点是不同租户间的应用程序环境的隔离(application context isolation)以及数据的隔离(data isolation)。

应用程序部分:实现为不同租户提供不同应用程序使用权限,通过进程或是支持多应用程序同时运行的装载环境来做进程间的隔离,或是在同一个伺服程序进程内以运行绪的方式隔离。

数据部分:实现通过不同的机制对不同租户的数据进行隔离,Force是采用中介数据(metadata)的技术来切割,微软MSDN的技术文件则是展示了使用结构描述的方式隔离。

SaaS是多租户技术的应用之一。从架构层面分析,SaaS区别于传统技术的重要差别就是多租户(Muti-Tenant)模式。SaaS多租户在数据存储上存在三种主要的方案,分别是:

1、独立数据库:一个租户一个数据库。这种方案与传统的软件方案相比,优势只是在于软件统一部署在运营商那里,但数据的成本依然没有减少。适用于对数据隔离级别要求非常高的租户,比如:银行、医院等。

优点:数据隔离安全性高,且有助于简化数据模型的拓展设计,满足租户的个性化需求;如果出现故障,恢复数据比较简单。

缺点:维护和购置数据库成本大。

2、共享数据库,隔离数据架构:多个或所有租户共享database,但不同的tenant和schema。

优点:

数据隔离安全性较高,但不是完全隔离;每个数据库可以支持更多的租户数量,降低了数据库成本。

缺点:

如果出现故障,恢复比较困难,因为恢复数据会涉及其他租户的数据;

如果需要跨租户统计数据,存在一定困难。

3、共享数据库,共享数据架构:租户共享一个database、一个schema,在表中通过tenantID区分租户的数据。

优点:

是三种方案中成本最低的方案,允许每个数据库支持的租户数量最多。

缺点:

隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量;---改动量太大

数据备份和恢复最困难,需要逐表逐条备份和还原。

1、每次开租要在所有schema/database里建同一套表

2、每次版本升级,要刷所有schema/database里的表

否则界面升版,db不升出问题

架构没有绝对的好和坏,只有权衡

PG 解决办法

模式可以用多种方式组织数据。下面是一些建议使用的模式,它们也很容易在缺省配置中得到支持:

如果没有创建任何模式,那么所有用户隐含都访问 public 模式。这样就模拟了没有模式的时候的情景。这种设置建议主要用在只有一个用户或者数据库里只有几个可信用户的情形。这样的设置也允许我们平滑地从无模式的环境过渡。

你可以为每个用户创建一个模式,名字和用户相同。要记得缺省的搜索路径从$user开始,它会解析为用户名。因此,如果每个用户都有一个独立的模式,那么他们缺省时访问他们自己的模式。如果你使用了这样的设置,那么你可能还想撤销对 public 模式的访问(或者删除它),这样,用户就真的限制于他们自己的模式了。

要安装共享的应用(被所有人使用的表、第三方提供的额外函数等等),我们可以把它们放到独立的模式中。只要记得给需要访问它们的用户赋予合适的权限就可以了。然后用户就可以通过用一个模式名修饰来使用这些额外的对象,或者他们可以把额外的模式放到他们的搜索路径中。

七、移植性

在 SQL 标准里,在同一个模式里的对象被不同的用户所有的概念是不存在的。而且,有些实现不允许你创建和它们的所有者不同名的模式。实际上,模式的概念和用户在那些只实现了标准中规定的基本模式支持的数据库系统里几乎是一样的。因此,许多用户考虑对名字加以修饰,使它们真正由username.tablename 组成。如果你为每个用户都创建了一个模式,这实际上就是PostgreSQL的行为。

同样,在 SQL 标准里也没有public模式的概念。为了最大限度地遵循标准,你不应该使用(可能甚至是应该删除)public模式。当然,有些数据库系统可能根本没有模式,或者是通过允许跨数据库访问来提供模式的功能。如果你需要在这些系统上干活,那么为了最大限度的移植性,应该根本不使用模式。

应用

Salesforce所建置的CRM应用系统是多租户技术在实务应用上成功的案例之一,除此之外还有Salesforce的PaaS就是Force平台及服务,以支持开发人员发展基于Force平台上的应用程序。

在云计算的加持之下,不论是IaaS、PaaS还是SaaS,都可以看到多租户技术的影子。


http://www.niftyadmin.cn/n/131007.html

相关文章

刷题记录:牛客NC24048[USACO 2017 Jan P]Promotion Counting 求子树的逆序对个数

传送门:牛客 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训–牛是可怕的管理者! 为了方便,把奶牛从 1∼n1\sim n1∼n 编号,把公司组织成一棵树,1 号奶牛作为总裁(这棵树的根…

Java集合(三)

目录 Map接口 Map接口常用方法 Map实现类之一:HashMap HashMap的存储结构 HashMap底层实现原理(以jdk7为例) jdk8相较于jdk7在底层实现方面的不同 HashMap源码中的重要常量 HashMap何时进行扩容 Map实现类之二:LinkedHashM…

SAP 计划策略组40和50分析

PP的策略常用的是按单生产和按库存生产两大类,其中有一些是疑似两种功能混和的。策略的应用取决于企业或者产品的生产模式,如金字塔型,倒金塔型,凹凸型等等。 SAP的策略很多。 按库存MTS:40,30,10,11,52,63&#xff1…

手把手教你添加多个IP地址

IP地址:IP地址是指互联网协议地址,又译为网际协议地址,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 子网掩码:子网掩码又叫网络掩…

python中函数def的使用方法

python中的函数是用来实现某一功能、可重复使用的代码块。 函数是用def关键词来创建的,语法结构如下: def functionname( parameters ):"函数_文档字符串"function_suitereturn [expression] 以下定义了一个实现加法运算的函数:…

CI流水线的理解

一、概念 单元测试:针对软件的基本单元(如:类、函数)所做的测试。 集成测试:将软件代码单元集成起来后,以组件、模块和子系统为单位进行的测试,主要测试接口间的交互关系。也称组件测试&#xf…

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用安装相关依赖安装 vue-plugin-hiprintJQuery引入依赖简单使用修改文本样式官方所有 打印示例安装相关依赖 安装 vue-plugin-hiprint npm install vue-plugin-hiprintJQuery 因为 vue-plug…

VSCode使用技巧,代码编写效率提升2倍以上!

VSCode是一款开源免费的跨平台文本编辑器,它的可扩展性和丰富的功能使得它成为了许多程序员的首选编辑器。在本文中,我将分享一些VSCode的使用技巧,帮助您更高效地使用它。 1. 插件 VSCode具有非常丰富的插件生态系统,通过安装插…