从项目开发到云端架构 5

2017-11-27 14:43:36 101

2.2.3            多租户系统

       多租户是一个符合SaaS模式的 Web 交付解决方案,通过在服务提供者环境中运行的单个软件实例服务于多个组织,为任何规模的企业提供业务价值。基于多租户的应用和普通web应用有如下差别:

 

  • 多租户的架构

  • 具备某种程度的自助注册功能。

  • 具备订阅/记账机制。

  • 能够有效地扩展。

  • 监视、配置和管理应用程序和租户。

  • 支持惟一的用户标识和身份验证。

  • 支持对每个租户进行某种程度的自定义。

 

 

       这里只对多租户的架构特点进行阐述,其他的请自行参看相关资料。通常,应用程序支持多个用户,但是前提是它认为所有用户都来自同一个组织。这种模型适用于未出现 SaaS 的时代,组织会购买一个软件应用程序供自己的成员使用。但是在 SaaS 和云的世界中,许多组织都将使用同一个应用程序;他们必须能够允许自己的用户访问应用程序,但是应用程序必须只允许每个组织自己的成员访问其组织的数据。

能够让多个组织(SaaS 中的术语称为租户)共存于相同的应用程序,同时不会破坏这些组织的数据的安全性,具备这种能力的应用程序就可以称之为多租户应用程序。

 

多租户可以分为几个不同的类别(如列表下方的图所示):

 

 

  • 云中的简单虚拟化,其中只对硬件进行共享。这种模型根本算不上是真正的多租户,但是在云环境中,它经常与虚拟化服务器配合使用,并被认为是一种多租户形式。在实际应用中,这种模型无法满足需求,并且仅仅比使用专用硬件的旧的 ASP 模型稍微好用一些

  • 共享应用程序,对每个租户使用不同的数据库。

  • 共享应用程序和数据库(效率最高,真正的多租户)。应用程序充分地共享数据库和应用程序的业务逻辑。实现这种模型非常的困难,因为需要修改数据库模式,向每个表和视图添加一个租户标识符,以及重写每一个 SQL 访问,向过滤器添加租户过滤条件。如果代码中任何必要的部分缺少这一逻辑,那么都将损害应用程序的数据安全性。

 

 

 


矽控物联
 

 22-09 软件部署图

 

       多租户就是说多个租户共用一个实例,租户的数据既有隔离又有共享,说到底就是如何解决数据存储的问题。现在多租户系统在数据存储上存在三种主要的方案:

 

  • 方案一:独立数据库,这是第一种方案,即一个Tenant一个Database(见图3-14),这种方案的用户数据隔离级别最高,安全性最好,但成本也高。

    • 优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。

    • 缺点:增大了数据库的安装数量,随之带来维护成本和购置成本的增加。这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。

    • 如果面对的是银行、医院等需要非常高数据隔离级别的租户,可以选择这种模式。

  • 方案二:共享数据库,隔离数据架构.即多个或所有租户共享Database,但一个租户一个Schema

    • 优点:为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可以支持更多的租户数量。

    • 缺点:如果出现故障,数据恢复比较困难,因为恢复数据库将牵扯到其他租户的数据;如果需要跨租户统计数据,存在一定困难。

  • 方案三:共享数据库,共享数据架构.即租户共享同一个Database、同一个Schema,但在表中通过TenantID区分租户的数据。这是共享程度最高、隔离级别最低的模式。

    • 优点:三种方案比较,第三种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。

    • 缺点:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量;数据备份和恢复最困难,需要逐表逐条备份和还原。如果希望以最少的服务器为最多的租户提供服务,并且租户接受以牺牲隔离级别换取降低成本,这种方案最适合。

 

 


组件

共享的资源

隔离方法

可配置方法

持久化

/

数据模型

数据库服务器JDBC/SDO

数据源,连接池

数据库账户

数据库/模式//缓冲区池等

存储隔离:专用的表/模式或数据库,或共享的表/模式

访问隔离:通过专用数据源和连接实现 DBMS 级访问控制,或通过筛选器实现应用程序级访问控制

数据库//模式

固定的保留字段

扩展的子表

XML 扩展字段

文件和 I/O

目录

文件

专用的目录/文件

共享的文件,使用与租户相关的筛选器

目录结构或文件格式


目录服务器

目录树

模式

每个租户专用的子树

共享的树,使用与租户相关的筛选器

目录树结构和模式定义


业务逻辑

身份验证/授权

组织结构/特权存储库

登录/授权模块

根据持久化数据模型(LDAP、数据库等)隔离的存储库

扩展的感知租户的用户注册插件

组织结构、角色、特权及其映射关系

全局 Java 对象

静态变量

单实例类的变量

每个租户专用的(静态)变量,使用容器对象

N/A


远程访问,套接字http/rmi/jini /corba/web service

远程服务

URI、端口号、用户名、密码等连接参数

专用的远程服务

共享的远程服务,把租户信息传播给远程服务

连接参数


日志

日志文件位置、内容、格式和配置

专用的日志文件

共享的日志文件,使用与租户相关的筛选器

日志格式和设置参数


缓存

缓存容器

专用的缓存容器

共享的缓存容器,使用与租户相关的筛选器

缓存设置参数


UI

JSP

应用程序范围变量(applicationContext tagusebean)

声明变量,徽标、样式、布局等

使用与租户相关的筛选器选择应用程序范围的变量

专用的声明变量

CSS、布局、图片等

servlet

单线程 servlet

servletContext

单线程 servlet 使用专用的servlet

使用与租户相关的筛选器选择 servletContext 变量

N/A


过程

/

工作流

BPEL 过程模板

模板级属性、活动、链接条件等

专用的过程模板

共享的模板,在过程实例中使用与租户相关的筛选器

过程模板的骨架

人工任务

动作、任务 UI 

扩展动作,支持根据启动者的租户信息隔离人员选择机制

UI 元素和共享任务的设置

人员选择规则


业务规则

规则

专用的业务规则

共享的业务规则,使用与租户相关的筛选器作为规则参数

业务规则的规则值设置


22-1. 多租户资源共享、隔离和定制机制概述

 

 

来源:timeson http://timeson.iteye.com/blog



矽控物联

矽控电子核心团队拥有十余年的硬件正向研发,生产制程,测试手法,品质控制经验。尤其擅长嵌入式ARM平台的工控物联网产品,以及海思平台的IPC视频类模组开发,为您的产品从创意到落地、批量市场化助力。公司可提供从硬件设计(原理开发及PCB Layout),PCB制板,SMT及接插件焊接,产品测试,产品老化全流程外包服务,收费合理,品质可靠。

垂询电话:0510-83488567-1     业务邮箱:wxdianzi#foxmail.com (#更换为@)