多租户是一个符合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
分享到:
相关推荐
【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。
在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...
云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。
在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...
以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...
综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...
“云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...
通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。
9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...
总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...
DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...
JSP+SSM项目-云端学习系统的Java毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在...
【SRA2021-G03-项目开发计划1.71】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。
《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...
它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...
在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...
总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...
9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...
本项目“springboot-netty-protobuf-master”旨在提供一个基础架构,它利用了Spring Boot的便捷性以及Netty的高效网络通信能力,同时采用Google的Protocol Buffers(protobuf)作为数据交换格式,确保数据传输的高效...