文档章节

SAAS之Multi-Tenancy解析

6pker
 6pker
发布于 2016/07/11 17:06
字数 1859
阅读 197
收藏 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
博文 98
码字总数 59361
作品 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
#技术分享# -- 云计算下的数据隔离

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

边缘行者
2012/12/19
0
0
SaaS架构成熟度模型

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

IT168网站
2009/06/25
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

没有更多内容

加载失败,请刷新页面

加载更多

Centos7安装docker和docker-compose

docker-安装 yum update yum install -y docker-engine docker-compose pip install -U docker-compose...

落叶清风
8分钟前
0
0
7个Python实战项目代码,让你感受下大神是如何起飞的!

关于Python有一句名言:不要重复造轮子。 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。 2、确...

糖宝lsh
9分钟前
0
0
【随记】Maven 与mysql 版本(maven mysql 5.1.38用的最多)

MySQL Connector/J 我的电脑mysql版本为5.7.20-log maven pom.xml 依赖可用5.1.38 pom.xml依赖代码 $加<properties>变量名的实例代码 <properties><!-- data --><mysql-connector-ja......

颖伙虫
11分钟前
0
0
观察者模式

意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应。 构成 被观察者:内部状态有可能被改变,而且又需要通知外部的对象。 观察者:需要对内部状态的改变做出响应的对象。 Java实...

noob_fly
18分钟前
0
0
设计模式之 MVC

MVC 是 模块化思想或者分层思想的实践。 当我们设计一个Web应用的时候,我们的业务流是,读取数据库中的数据,进行逻辑处理,渲染到页面;如果是交互型的页面,那么页面有输入或者事件发生的...

backbye
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部