简介
关于"使用 IBM 中间件实现 SaaS 解决方案"系列的更多文章,请参考:
∙ 使用 IBM 中间件实现 SaaS 解决方案
您也可以通过以下链接获取更多关于 SaaS 的资源:
∙ developerWorks 上的 SaaS 资源
在本系列的第二篇文章中(使用 IBM 中间件实现 SaaS 解决方案,第 2 部分:启用多租户的方法),我们讨论了启用多租户的三种方法,即虚拟化、中介和共享。本文主要讨论第三种方法,介绍如何使用单一共享应用程序实例同时支持多个客户组织(即租户),实现经济有效性目标。我们要使用 IBM 中间件开发一个经济有效、安全且可配置的多租户应用程序。我们主要关注多租户应用程序设计和实现的三个关键方面:
∙ 资源共享机制:减少每个租户的硬件、软件和管理成本
∙ 安全隔离机制:防止租户之间的非法访问、冲突和干扰
∙ 定制机制:通过配置方法支持与租户相关的 UI、访问控制、过程和数据模型
为了便于读者理解,我们设计了一个示例应用程序 EasyOA,它应该有助于解释如何使用 IBM 中间件产品(尤其是 IBM WebSphere Application Server (WAS)、DB2、Tivoli Directory Server (TDS) 和 WebSphere Process Server (WPS))实现多租户模型。
回页首
基于资源共享的多租户启用方法
如图 1 所示,基于资源共享的多租户启用模式分为两类:1) 多个应用程序实例和 2) 单一共享应用程序实例。前者为每个租户提供专用的应用程序实例,这些实例在共享的硬件、操作系统或中间件服务器上运行。后者用单一共享应用程序实例支持许多租户,这个实例包含各种资源。这两种模式可以支持的租户数量差异很大。多实例方法用来支持几个(最多几十个)租户,每个租户可能有数百位用户,使用一组服务器。单一共享实例方法用来支持大量小型租户,租户数量常常是数百个、数千个甚至更多。
图 1. 多个应用程序实例与单一共享应用程序实例模式
应该根据特定的应用场景和目标客户的需求选择资源共享模式。通常,大型企业喜欢多实例方法,因为这有助于避免与资源共享相关联的潜在风险。对于面向 SMB 客户(他们的服务预订预算比较少)的大多数服务,为了实现规模效益,业务模型必须通过吸引大量客户增加收入,同时使用非常高效的可伸缩的多租户基础结构支持这些客户,降低每个客户的平均服务交付成本。在这些场景中,多实例模式是不合适的,因为每个租户带来的收入很少,不足以抵偿为租户分配专用的硬件/软件资源的成本。
尽管多租户应用程序在经济有效性方面非常有优势,但是它们也面对许多难题,尤其是与隔离和定制相关的问题。
首先,应该在各个租户之间支持应用程序级隔离。尽管所有租户共享同一个基础结构和应用程序实例,但是从用户体验、服务质量 (QoS) 和管理的角度来看,租户当然希望像专用租户那样访问和使用服务。因此,在体系结构设计的几乎所有部分都应该仔细考虑隔离,包括非功能性和功能性两方面,涉及安全性、性能、可用性和管理等。
第二,应该支持租户在运行时定制自己的服务,而不会影响其他租户。在过去,定制通常需要修改代码和重新部署应用程序。但是,这种定制模式在多租户服务环境中是不现实的。因为所有租户共享同一个应用程序实例,如果一个租户进行这样的定制,所有租户的服务都会受到影响,而且在更新期间可能会中断服务。随着租户数量的增加,中断会越来越频繁,导致非常严重的服务可用性问题。因此,一个租户在运行时的定制不应该影响其他租户,这是多租户应用程序的关键需求之一。
回页首
多租户资源:J2EE 工件的共享、隔离和定制机制
对于 J2EE/SOA 应用程序,有许多种可访问的资源,在用户界面、业务逻辑、过程/工作流和数据模型等层上还有各种运行时工件。为了设计非常高效的多租户应用程序,我们需要通过以下两个步骤小心地管理这些资源:
∙ 识别出可以在租户之间共享的所有资源类型。估计通过采用共享机制能够节省的成本,据此确定它们的优先次序
∙ 对于每种可共享资源,列出所有潜在的隔离和可配置点。针对不同的多租户场景,评估和总结最合适的隔离和定制方法
表 1 简要总结这些重要的资源以及相应的共享、隔离和定制机制。在本系列的后续文章中,我们将详细介绍它们。
表 1. 多租户资源共享、隔离和定制机制概述
组件 | 共享的资源 | 隔离方法 | 可配置方法 |
持久化数据模型 | - | - | - |
数据库服务器(JDBC、SDO 等) | 数据源,连接池 | 存储隔离:专用的表/模式或数据库,或共享的表/模式 | 数据库/表/模式 |
文件和 I/O | 目录 | 专用的目录/文件 | 目录结构或文件格式 |
目录服务器 (LDAP) | 目录树 | 每个租户专用的子树 | 目录树结构和模式定义 |
业务逻辑 | - | - | - |
身份验证/授权 | 组织结构/特权存储库 | 根据持久化数据模型(LDAP、数据库等)隔离的存储库 | 组织结构、角色、特权及其映射关系 |
全局 Java 对象 | 静态变量 | 每个租户专用的(静态)变量,使用容器对象 | N/A |
远程访问(套接字/Http、RMI、CORABA、JNDI、Web 服务) | 远程服务 | 专用的远程服务 | 连接参数 |
EJB | 有状态 EJB 实例 | 每个租户专用的有状态 EJB 实例、MDB、队列 | 共享的实体 Bean 的保留属性 |
日志 | 日志文件位置、内容、格式和配置 | 专用的日志文件 | 日志格式和设置参数 |
缓存 | 缓存容器 | 专用的缓存容器 | 缓存设置参数 |
UI | - | - | - |
JSP | 应用程序范围的变量(tag、usebean、applicationContext 等) | 使用与租户相关的筛选器选择应用程序范围的变量 | CSS、布局、图片等 |
servlet | 单线程 servlet | 单线程 servlet 使用专用的 servlet | N/A |
过程/工作流 | - | - | - |
BPEL 过程模板 | 模板级属性、活动、链接条件等 | 专用的过程模板 | 过程模板的骨架 |
人工任务 | 动作、任务 UI 等 | 扩展动作,支持根据启动者的租户信息隔离人员选择机制 | UI 元素和共享任务的设置 |
业务规则 | 规则 | 专用的业务规则 | 业务规则的规则值设置 |
回页首
EasyOA,示例应用程序
EasyOA 是一个为小型企业开发的简单的办公自动化应用程序。这个应用程序主要包含一个休假申请过程。职员可以通过这个过程提出休假申请和查询自己的休假历史,而经理通过这个过程批准职员的申请。管理员有权查看公司所有用户的操作日志。
EasyOA 是一个典型的 J2EE 应用程序,它基于以下 IBM 中间件:
∙ IBM WebSphere Application Server V6.02
∙ IBM WebSphere Process Server V6.02
∙ IBM Tivoli Directory Server V6.0
∙ IBM DB2 V8.2
图 2. EasyOA 的总体体系结构和多租户启用特性
EasyOA 在设计时考虑到了支持多租户。如图 2 所示,支持的主要多租户特性如下:
∙ 身份验证和授权说明如何设计组织结构和访问控制(特权)数据存储/访问模式。它们还在多租户上下文中增强了标准的 Java Authentication and Authorization Service (JAAS) 模块/过程。
∙ 公用 J2EE 工件说明如何通过一种基于隐式筛选器的机制区分租户,隔离和定制用户界面和业务逻辑的资源。
∙ 持久化数据模型从隔离、安全性、定制和性能等许多角度,识别和评估用于数据存储/访问的所有多租户设计模式。
∙ 业务过程说明如何按照共享过程模板模式,隔离和定制不同租户的人工任务或过程的人员/角色选择。
本系列的第 4 部分将全面介绍这些特性的体系结构和实现。
回页首
结束语
多租户设计模式(使用单一共享应用程序实例同时支持多个租户)对于提高 Web 应用程序的经济有效性非常重要。在本文中,我们讨论了总体体系结构设计原则,以及使用 IBM 中间件开发安全且可配置的多租户应用程序的相关技术。本文只是概述,后续文章提供关于这个主题的详细信息。
参考资料
学习
∙ IBM SOA 网站:概述 SOA 以及 IBM 如何帮助您实现 SOA。
∙ “使用 IBM 中间件实现 SaaS 解决方案,第 1 部分:挑战和体系结构模式”:介绍什么是多租户,以及构建和部署多租户 Web 交付解决方案的一些技术困难。
∙ “使用 IBM 中间件实现 SaaS 解决方案,第 2 部分:启用多租户的方法”:分类介绍在 Web 交付解决方案(也称为 software-as-a-service)中启用多租户的方法,对比各种方法的成本和益处。
∙ “构建 SOA 组合业务服务,第 7 部分: 为组合业务服务提供多分租支持”:多分租(multi-tenancy)是指从共享的公共承载环境中为多个组织(客户)提供服务的能力。本文将说明多分租的概念,并将介绍软件作为服务的网络交付方法。
∙ “保护多承租 SaaS 应用程序”:本文介绍了一个保护多承租 Java™ 应用程序的可行的、实用的方法,即结合使用开源 Spring Security 框架和 Apache Directory Server。作者通过一个多承租示例 Web 应用程序来展示这个方法。
∙ “满足软件即服务 (SaaS) 应用程序的安全需求”:在本文中,您将了解基于 Java™ 2 Platform Enterprise Edition (J2EE) 的、多承租者的、高效的 SaaS 应用程序的各种安全需求,并研究相关的机制,以处理实现用户安全身份验证以及授权的各种需求。
∙ “通过软件即服务(SaaS)模型加速移动应用程序的开发”:阅读 IBM Rational ClearQuest 开发人员如何以低维护和低成本的形式访问全世界超过 1,500 个真实的手机。
∙ 有关 SOA 的更多信息,请访问 developerWorks 上的 SOA and Web services 专区。
本文来源:https://www.2haoxitong.net/k/doc/2edae4f6f90f76c661371a11.html
文档为doc格式