文档章节

SAAS之Multi-Tenancy解析

6pker
 6pker
发布于 2016/07/11 17:06
字数 1859
阅读 202
收藏 1

最近做的项目涉及到比较深入的一部分,就是定义客户关系,在我们的商讨中,我们决定,采用服务商的模式,就是我们是基础服务商,由客户组合服务,向客户提供基于云端的服务支持!这就自然引出了以下概念:

 

 

saas百科: 

        SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。它与“on-demand software”(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。

 

 

那么,问题来了,怎么针对不同的用户提供一种高效,安全的基础数据服务呢?本着我们想到的问题,肯定有人遇到过的原则,我们搜索到了一个解决方案:

 

多租户(multi-tenancy)

  意指在其中一个应用程序的运行实例同时服务多个客户端(租户)体系结构。这是非常常见的SaaS解决方案。

 

关于多租户的实现,大概有三种:“N个租户N个数据库”,“N个租户1个数据库N个Schema”,“N个租租户1个数据库1个Schema”


1.分离数据库(Separate Databases)

“N个租户N个数据库”

每个租户的数据保存在一个物理上独立的数据库实例。JDBC连接会特别指出每个数据库。一个通用的应用程序的方法是定义一个JDBC连接池,当前登录的用户关联的"租客标识符"来选择JDBC连接.
好处:可以轻松地扩展应用程序的数据模型(稍后讨论)以满足住户的个别需求,而且在失败时从备份恢复租客的数据是一个相对简单的过程。
坏处:导致更高的设备成本,以及维护和备份租客数据方面的成本。
相对较高的硬件,维护成本使它适合于愿意额外支付增加的安全性和可定制性的客户。例如,在银行或医疗记录管理等领域的客户往往有很强的数据隔离的要求,甚至不得不不为每个租客提供具有其自己单独的数据库。

 

2.共享数据库,彼此独立的Schema(Shared Database, Separate Schemas)

“N个租户1个数据库N个Schema”
每个租客有它自己的表,可以理解为为每个租客分表.每个租客在共享的数据库中具有其自己单独的一组表.当客户第一次订阅该服务时,资源调配子系统为租客创建一组离散的表,并将它与租客的Schema关联。您可以使用 SQL 创建命令创建一个架构,并授权用户帐户来访问它。应用程序然后可以创建和访问表内的租户的架构使用SchemaName.TableName公约:
CREATE TABLE ContosoSchema.Resumes (EmployeeID int identity primary key,Resume nvarchar(MAX));
创建Schema后,它是作为租客帐户的默认Schema设置:
ALTER USER Contoso WITH DEFAULT_SCHEMA = ContosoSchema
租客帐户可以访问其默认架构内的表,只是通过指定TableName,而不是使用SchemaName.TableName.这种方式,一组 SQL 语句可以给所有的租客使用来访问其自己的数据,例如:SELECT * FROM Resumes
 

优点:

        这样是容易实现的一种方法,租户可以与单独的数据库方法一样扩展数据模型。(创建的表但一旦不符合需求,租客可添加,修改表)

        这种方法提供了中等程度的逻辑数据隔离安全,虽然比不上作为一个完全独立的数据库,但却可以在每个数据库服务器支持大量的租户。

缺点:

        数据出现故障时是难以恢复某租客。如果每个租客有其自己的数据库,则还原单个租户的数据意味着简单地从最近的备份还原数据库。而这个方法则意味着用备份的数据还原整个数据库,而不管在同一数据库上的每个租客的数据是否遭到损失。因此,要还原单个客户的数据,数据库管理员可能需要将数据库还原到一个临时的服务器,然后将客户的表导入到生产服务器上 — — 一个复杂和可能很耗时的任务。


 

3.共享数据库,共享Schema(Shared Database, Shared Schema)

“N个租租户1个数据库1个Schema”
这个方法就是最简单的一种了.每个表使用租客的一个标识符.所有租户都共享一组相同的表,一个租客 标识符ID 将每个租客与它拥有的行相关联.

优点:

        最低硬件和备份成本,因为它允许每个数据库服务器服务更多的租户。然而,因为多个租户共享相同的数据库表,这种方法可能会导致安全问题,你必须努力确保租户始终不能访问其他租户的数据,即使在发生意外。

缺点:

        对于租客还原数据的过程是类似于共享架构方法,要重新插入临时数据库单个行到生产数据库中。如果有非常大量的受影响的表中的行,这可能导致性能明显降低数据库服务的所有住户。共享架构方法能够用少量的服务器,服务一大批租户和潜在客户,如果他们愿意用更低的费用获取安全性.

每次CRUD都需要使用对应租客 标识符ID.SQL变得复杂.

 

总结:

        SaaS的概念在很久以前,是我们通过部署N个程序来完成的为多个用户服务,但是在咱们程序的维护上,增加了太多的成本,本着硬件能解决的问题,软件都能解决,有了这个概念,实际这不是全新的概念,而是为了解决一组问题而提出的解决方案!今天咱们充足了弹药,在下一篇博客,咱们一起将它实现吧!

本文转载自:

共有 人打赏支持
6pker
粉丝 51
博文 97
码字总数 59252
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

6pker
6pker

引用来自“zzuqiang”的评论

期待更新,我也在学习和了解SAAS
亲,我也是转载的
zzuqiang
zzuqiang
期待更新,我也在学习和了解SAAS
Scale out Database Arch

You can easily scale out Azure SQL databases using the Elastic Database tools. These tools and features let you use the virtually unlimited database resources of Azure SQL Datab......

MtrS
2016/11/16
0
0
SaaS架构成熟度模型

【IT168 技术文章】 Dharmesh Shah最近撰写了有关“软件作为服务”即SaaS的架构成熟度模型的文章。之前Gianpaolo Carraro曾提出可伸缩性、多租户(multi-tenancy)与通过配置进行定制(customiz...

IT168网站
2009/06/25
0
0
#技术分享# -- 云计算下的数据隔离

IT软件服务商所提供的传统企业软件系统大多基于Multi-Instance(多实例)架构,即对于每一个客户组织,都有一个单独的软件系统实例 为其服务;而搭建于云计算平台的软件系统则广泛采用了Mul...

边缘行者
2012/12/19
0
0
Mezzanine 1.3 和 Cartridge 0.7 发布!

项目名称: - 全面支持Django 1.5 - 改进了Lettuce测试 - 改进支持django-compressor - 最新前端库(jQuery/ jQuery UI /Boostrap) - 所有以前的版本均在GitHub/Bitbucket标记 - 在安装过程...

renwofei423
2013/01/08
1K
2
Bonita BPM 5.6开源版与三种付费版在功能上的区别

http://www.bonitabpm.org/index.php/article/show/articleid-15 从BOS 5.6开始,Bonita BPM的SP版本又细分为Teamwork版, Efficiency版和Performance版,下表是各版本里面所包含的功能的比较...

DongZhang
2011/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

防止Tweak

什么是tweak? 英文意思为捏, 拧,扭,稍稍调整(机器、系统等)。 依据维基百科的定义,tweak指的是对电子系统进行轻微调整来增强其功能的工具;在ios中tweak特指那些能够增强其它可执行程...

HeroHY
10分钟前
0
0
linux中常用标识---不定期更新

LINUX常用标识符: 1 & && | || &: 表示进程在后台运行 例如 redis-server & 不是所有后台运行都是& 比如es ./bin/elasticsearch -d es后台运行&&: 第一个命令执行成功后 才执行后面的命令...

geek土拨鼠
48分钟前
1
0
Mybatis 中$与#的区别,预防SQL注入

一直没注意Mybatis 中$与#的区别,当然也是更习惯使用#,没想到避免了SQL注入,但是由于要处理项目中安全渗透的问题,不可避免的又遇到了这个问题,特此记录一下。 首先是共同点: 在mybatis...

大雁南飞了
今天
0
0
Spring Clould负载均衡重要组件:Ribbon中重要类的用法

Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合。通过Ribbon,程序员能在不涉及到具体实现细节的基础上“透明”地用到负载均衡,而不必在项目里过多地编写实现...

Ala6
今天
0
0
让 linux 删除能够进入回收站

可以参考这个贴子 https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79543316 从那个git地址 把saferm.sh下载下来 把saferm.sh复制到 /usr/bin 目录下 在用~/目下 的.bashrc 下加一句这...

shzwork
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部