多租户是一个符合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 ,tag、usebean等)
声明变量,徽标、样式、布局等
|
使用与租户相关的筛选器选择应用程序范围的变量
专用的声明变量
|
CSS、布局、图片等
|
servlet
|
单线程 servlet
servletContext
|
单线程 servlet 使用专用的 servlet
使用与租户相关的筛选器选择 servletContext 变量
|
N/A
|
过程
/
工作流
|
BPEL 过程模板
|
模板级属性、活动、链接条件等
|
专用的过程模板
共享的模板,在过程实例中使用与租户相关的筛选器
|
过程模板的骨架
|
人工任务
|
动作、任务 UI 等
|
扩展动作,支持根据启动者的租户信息隔离人员选择机制
|
UI 元素和共享任务的设置
人员选择规则
|
业务规则
|
规则
|
专用的业务规则
共享的业务规则,使用与租户相关的筛选器作为规则参数
|
业务规则的规则值设置
|
表22-1. 多租户资源共享、隔离和定制机制概述
上一篇 从项目开发到云端架构(04) :http://timeson.iteye.com/blog/1685746
下一篇 从项目开发到云端架构(06) :http://timeson.iteye.com/blog/1685862
- 大小: 20.6 KB
分享到:
相关推荐
DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...
基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,可直接运行,实测! 基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,...
自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。 更多其他QCon大会PPT:...
①兼容市面上主流的多家相机,理论上兼容所有硬件,可灵活扩展,②相机识别后数据自动上传到云端并记录,校验相机唯一id和硬件序列号,防止非法数据录入,③用户手机查询停车记录详情可自主缴费(支持微信,支付宝,...
该网上商城系统采用了JavaWeb、JSP和Servlet作为开发技术,基于MVC设计模型进行构建。MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller...
同时我们也提供了对应的源代码,可以查看源代码,克隆或下载项目到本地进行修改,在本地通过CloudBase CLI进行一键部署。 Daruk是一款基于Koa2,使用Typescript开发的轻量级web框架,使用。 ThinkJS是一种可以使用...
支持数据采集写入到HDFS、HBase、Hive等大数据库中。 支持准实时数据的采集和处理。 数据存储处理: 支持原来BW数据仓库的数据逐层转换处理。 支持Hadoop大数据库中进行分布式海量数据的并行处理。 ...
《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
基于Java智慧校园云端管理系统的设计和实现源码(毕设源码).zip 【资源说明】 该项目是个人毕设项目源码,评审分达到97分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关...
基于云开发的校园服务项目,简单易上手的wx校园服务小程序,服务广大大学生练手项目,完全开源 软件架构: 前端应用wx原生的weui组件库 后台基于云开发技术生成可视化管理后台 安装教程: 源码下载后解压至电脑...
专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 https://gitee.com/enterprises} 软件架构 软件架构说明 ...
资源包含STM32源码,ESP源码,原理图,PCB,项目描述说明,PPT,前后端架构图,架构设计,数据库设计,使用SpringBoot框架开发的服务端源码,Android手机APP源码 后端采用SpringBoot开发,Android客户端采用MMVM...
DiyGw是一个基于TwoTHink开源的内容管理框架,由Onethink基础上升级到最新的ThinkPHP5.0.6版本开发,提供更方 便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制,融合了模块化、驱动化和插件化的...
专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 } 软件架构 软件架构说明 安装教程 xxxx xxxx xxxx 使用说明 ...
利用SpringBoot的快速开发能力和微服务架构,该系统旨在提供一种集中化的方式来上传、存储、整理和分享各种格式的多媒体文件,如图片、音频、视频等。 采用前后端分离的设计哲学,前端可能运用了现代JavaScript框架...
安卓项目的开发结构,有原来最初的mvc,到后来有人提出的mvp,然后到mvvm的发展,无非就是依着六大设计原则的不断解耦,不断演变,使得项目的开发高度组件化,满足日常复杂多变的项目需求。 依赖倒置原则-...
《google android sdk开发范例大全(第3版)》继承前两版由浅入深的方式,范例总数由原先的160多个增加到了200多个,在用户交互界面、手机控件、交互式通信服务、手机自助服务、娱乐多媒体等方面均增加了相应的范例...