转:将单租户应用程序转换为多租户应用程序

将单租户应用程序转换为多租户应用程序

有关如何增强多租户应用程序的7个技巧

ChristinaLau,杰出工程师,IBM

ValentinaBirsan,资深开发人员,IBM

BhadriMadapusi,资深软件开发人员,IBM

简介:作者们分享了他们将单租户SOA应用程序转换为多租户云应用程序的过程中获得的经验;这些最佳实践共包含7个重要的技巧。

本文的标签:云计算,关于产品,应用开发,应用部署,模式,用例,设计模式,访问,访问控制,资产...更多标签

资产保护,资产管理,身份管理,软件既服务_(saas)

标记本文!

发布日期:2012年3月31日

级别:中级

原创语言:英文

访问情况:929次浏览

评论:1(查看|添加评论-登录)

平均分0星共0个评分平均分(0个评分)

为本文评分

作为专业技术人员,我们的目标之一就是分享我们的经验和教训,在本例中,这些知识来自构建可以在IBM®SmartCloudEnterprise产品上运行的多租户应用程序所涉及的相关工作。尤其值得一提的是,我们将介绍用于将现有单租户SOA应用程序转换为多租户软件即服务(SaaS)应用程序的一些技术。

我们最终还是希望有人能够开发出一些工具,帮助开发人员自动完成从单租户应用程序向多租户应用程序的复杂转换。

首先,我们来测试一下来自IBMPerspective(我们对此相当熟悉)的一些传统解决方案。

IBM行业解决方案

IBM提供了包含丰富功能的广泛而又深入的软件产品组合。此外,根据客户的反馈,我们可以确信,IBM是惟一一家能够将这些功能组合起来,提供帮助客户解决特定业务问题的开箱即用行业解决方案的公司。这样,客户就能减少所花费的时间,并通过集成IBM提供的软件产品来满足其特定业务需求。

IBMSOAReferenceArchitecture

IBMSOAReferenceArchitecture是获取面向服务架构价值主张的关键推动者,它有助于创建灵活的、可重用的资产,从而实现端到端业务解决方案。

OpenGroupSOAReferenceArchitecture(SOARA)标准为面向服务的解决方案(包括云解决方案)中的构造、设计和实现决策提供了指导和选项。SOAReferenceArchitecture标准旨在为创建和评估架构提供一个蓝图。此外,它还为将SOA的基本元素集成到解决方案或企业架构中提供了洞察力、模式和构建块。

IBMSOA参考架构有助于创建由业务流程、业务工具、消息交换、服务集成和数据访问所驱动的解决方案,并封装旧版软件和组件。

有关的更多信息,请参阅IBM在SOA参考架构标准中的优势。

很多此类解决方案在开发过程中都遵循IBMSOAReferenceArchitecture。例如:

可以使用门户将应用程序的组件整合到一个单独的视图中,这样,人们就能够基于其角色,与公司的业务或者IT服务进行协作与互动。

当集成并连接服务时,企业服务总线可以提供较好的灵活性。

一些安全规则(比如身份、身份验证、授权、审计和合规性)可应用于整个面向服务生命期。

对关键性能指标进行实时监测,这样,解决方案就能获取预防、隔离、诊断和修复问题所需的信息。

业务分析可用于发现微妙的关联,帮助解决方案制定正确的决策。

通过集成的门户来设计、定制和使用报告。

试想一下,通过组合包含了WebSphere®Portal、Lotus®Sametime、CognosBusinessIntelligenceWebSphereMQ、WebSphereMessageBroker、BusinessProcessManagement、Tivoli®AssetManager、DB2®、Rational®等产品的软件产品提供的功能来创造新的、开箱即用解决方案的情形。

那么,接下来的挑战是...

...如何利用现有的、没有自己的租户概念的企业产品来创建一个多租户SaaS应用程序,尤其在需要扩大规模来支持解决方案中的越来越多的租户的时候?

最近,我们正与我们的IndustrySolutions团队一起进行开发工作,工作内容就是将单租户SOA解决方案转换为多租户SOA解决方案,从而能够真正地将该解决方案作为SaaS解决方案部署到IBMSmartCloudEnterprise中。尽管一个SOA解决方案可以采用很多IBM中间件产品,并且将其转换成多租户可能令人生畏,但是IBM中间件产品的可扩展性确实将这一转换变得相当简单。

如果您想将现有的单租户解决方案转换成多租户SaaS解决方案,本文描述的技术和见解对您可能很有用。

我们先来了解一下多租户的概念。

回页首

多租户的概念

大大小小的公司,包括ISV,都花费越来越多的精力来探索基于云的解决方案和SaaS,将它们作为其交付模式。在IBM软件产品组合内部,有多个用于创建新的Saas产品的方法。

方法之一是从头创造新的产品,将它作为SaaS解决方案来提供;例如,IBMBlueworksLive。还有一个方法是将原有的内部、企业级产品“转化”为SaaS解决方案;例如,Commerce-as-a-Service、Cognos和IBMSmartCloudforSocialBusiness(以前的LotusLive™)。

对于第一种方法,往往需要从头开始构建多租户。对于第二种方法,原有的内部产品可能不包含租户的概念,但可以通过采用自定义配置来实现多租户。

我们来看几个常见的多租户场景,以加强我们对租户基本概念的理解。

回页首

常见多租户场景

我们已经在前面的文章中讨论过了多租户的一般概念(请参阅参考资料)。我们需要知道一个关键概念,就是关于资源共享有多种多样的可能性。

图1定义了云环境中有关多租户的技术堆栈。

图1.依据资源共享级别来定义的多租户

依据资源共享级别来定义的多租户

正如您所见,多租户场景包括:

不共享资源。

共享硬件资源。

共享操作系统。

共享中间件。

共享应用程序。

我们来看一下每一项的细节。

场景1:不共享资源。每个租户都有自己一套完整的应用程序、中间件、操作系统和基础架构(硬件)。每个租户与其他租户完全隔离,惟一的例外是它能够在相同的物理数据中心中运行。

场景2:共享硬件。租户开始共享一个数据中心的基础架构。例如,租户可以共享数据中心中的服务器(比如,Intel®、Power)、存储(SONAS®、NetApp®)和网络(Juniper、Cisco)。

场景3:共享操作系统。租户现在共享基础架构和操作系统。KVM与VMware®之类的管理程序通常用于硬件虚拟化,以便实现在硬件上运行多个操作系统。租户之间仍然保持相当程度的隔离,因为每个租户可以拥有各自版本的应用服务器、数据库服务器和及应用程序。这个级别的共享还叫做基础架构即服务(IaaS)。

场景3:共享中间件。租户现在开始共享一系列运行在共享的操作系统和基础架构之上的中间件服务;例如,安全服务、门户、数据库服务、监测服务,等等。各种应用程序都能够构建在这些共享的中间件组件之上。这一级别的共享还叫做平台即服务(PaaS)。

场景5:共享应用程序。租户现在与其他租户共享相同的应用程序。基于这种共享,租户之间还可以共享相同的中间件,包括用于实现该应用程序的版本。虽然租户之间共享相同的底层资源,但他们彼此之间仍然是独立的。一个租户看不到其他租户的资产(比如存储在数据库服务器或者文件服务器中的数据)。这一级别的共享还叫做软件即服务(SaaS)。

通常,多租户所指的级别越高(意思是在场景5中,共享应用程序),创建新租户时所需做的工作越少,因为已经共享了更多的底层堆栈。对于任何计划向越来越多租户提供的业务来说,在扩大规模时不需要增加大量技术和业务资源,这是首要考虑的问题。对于厂商和租户来说,共享相同的代码库能够缩短实现价值的时间,并能使新的创意在几周之内(而不是几月或几年之内)完成部署。

我们前面曾提到过,有些单租户软件解决方案在其设计之初不包含本地租户的概念;在正式介绍7项技术之前,我们先来讨论一下如何解决将单租户软件转化为多租户解决方案的问题。

回页首

隔离能够变相地创建一个租户

虽然我们提到的软件中都没有明确的租户概念(或者,租户当中用户的概念),每个产品都包含内建的、有关隔离的概念,这就可能运用到多租户解决方案中。

例如,在关于利用RationalAssetManager来获取协作多租户最佳实践的文章(“Bestpracticesforcloud-basedasset-centriccollaboration”,参阅参考资料)中,描述了如何利用RationalAssetManager中的资产社区的概念来获取资产隔离,并在租户之间共享资产。可以为租户创建资产社区,而来自租户的用户可以在该社区中发布资产;但是,默认情况下,来自其他租户的用户看不到也不能访问这些资产。

对于前面提到IBM产品的剩余部分而言,可以应用类似的方法来处理它们。因为IBM软件具有可扩展性,所以可以采用产品的API来实现自定义。

基于这一概念,我们现在来看一下用来转换租户的7项技术。

回页首

用于转换为多租户的7项技术

在转换SOA解决方案的工作当中,我们确定了7项技术,在将单租户应用程序转换成为构建于IBM中间件产品之上的完整多租户SaaS应用程序时,这些技术可能非常有用。这些技术包括:

共享LDAP

单点登录

共享数据库服务器

共享企业服务总线

租户特定报告

租户特定日志文件

基于WebSpherePortal的统一用户界面

详细看一下每一项的内容

共享LDAP

想要创建多租户环境,首先要部署的就是共享LDAP,这样就有了一个专门用来对用户和组织信息进行持续管理的区域。IBMTivoliDirectoryServer是较常用的LDAP实现技术。所有IBM软件产品都已提供了与TivoliDirectoryServer的集成能力,所以,目前很多现有的安装资产都可以使用。

还有几个地方需要注意。通常,每个产品都有自己的默认LDAP目录结构和属性,这些结构和属性针对专用于产品的搜索过滤器结构进行了优化。在许多产品之间共享这LDAP时,就需要进行一些标准化处理并调整这些默认设置。

例如,注意大小写:有些产品会忽略大小写,有些则不然,具体体现在以下方面:

cn=users,o=ibm,c=us

与:

cn=Users,o=IBM,c=US

单点登录

单点登录(SSO)允许租户登录一次,就可以访问所有的系统,而不必在每个系统中都登录一次。由于很多中间件产品都构建在WebSphereApplicationServer(WAS)之上,因此,可以采用IBMLightweightThird-PartyAuthentication(LTPA)技术,并且在能够在基于浏览器的环境中很有效地运行。

图2展示了整个流程的一个示例。

图2.在多个采用LTPA令牌的服务器之间实现单点登录

在多个采用LTPA令牌的服务器之间实现单点登录

当一个HTTP请求到达时,WebSEAL与TivoliAccessManagerPolicyServer协同工作来确定所请求的资源是否受到保护。如果资源受保护,那么WebSEAL会确保在允许请求到达应用程序之前对用户进行身份验证;例如,一个在WebSpherePortal中运行的portlet。

如果该portlet需要访问其他服务器,例如SametimeCommunityServer,那么共享的LTPA令牌就会标识出已经通过WebSEAL进行身份验证的用户;不需要对用户重新进行身份验证。

虽然LTPA令牌是用来在WebSphere应用服务器之间实现SSO的标准技术,但在云中实际部署这一系统时,还必须非常谨慎。我们在部署该解决方案时会遇到一些挑战。

通常会从一个系统(例如,WebSEAL)中导出LTPA密钥文件,然后将它导入另一个系统中(例如,WebSpherePortal和Dominoserver)。重要的是,这个密钥文件要采用一致的方式来描述共享的LDAP,例如,采用一个完全合格的域名:

com.ibm.websphere.ltpa.Realm=vhost1111.site1.compute.ihost.com\:389

如果服务器采用了别名,并导出一个带有该别名的LTPA密钥,但是其他服务器不支持使用别名,那么SSO将无法正常工作。

在指示LTPA令牌已经到期的日志文件中,可能会看见一个错误。当每个虚拟机上设置的操作系统时间不一致时,就会出现这一错误。例如,如果在WebSEALVM上的时间设置为10:00,而在PortalVM上时间设置为1:00,那么,当Portal服务器打开令牌并将其与本地时间对比时,就会认为令牌已经过期了。

这一问题在IBMSmartCloud环境当中相当突出,因为无法确保在虚拟机中的规定的时间保持相同。必须采用额外的步骤在每个虚拟机中重置或重新同步时钟,将它们设置为相同的时间和相同的时区,从而确保SSO能够正常工作。

在测试整个流程之前,我们建议先进行成对SSO测试。例如,确保SSO已在下面两个系统之间正常工作:

WebSEAL与Portal

WebSEAL与Sametime

Portal与Sametime

当这些生效时,再测试整个路径WebSEAL>Portal>Sametime。在SOA解决方案中涉及多台服务器,因此,需要先采用一个系统方法进行测试,然后再重复该测试,这是成功管理云环境当中各类错误的关键要素。

共享数据库服务器

在多租户环境当中需要考虑的第三件事是如何隔离不同租户的数据。假设单租户应用程序正采用DB2之类的关系数据库,那么这一任务就相当简单了。

图3给出了一些常见的模式。

图3.多租户数据库模式

多租户数据库模式

每个租户有自己的数据库。

在单个数据库中,每个租户有自己的模式。

所有租户共享相同的数据库。

第一个场景中,需要对应用程序进行极少的改动就能识别租户概念。通常,您只需确保应用程序已经基于租户ID连接到正确的租户特定数据库。

场景1还提供了租户间最彻底的隔离。例如,可在不同的计划中对租户1和租户2的数据库进行存档。

如果由于现有数据库连接的设计问题,使得应用程序具有自己的元数据概念,并且需要存储在同一数据库中的用户数据,那么第2个场景会比较典型。在这种情况下,应当考虑利用同一数据库中的不同架构来分隔租户数据,并且应该将所需的重新设计工作减至最少。

第3个场景需要大量的应用程序变更和表设计。必须在表设计当中融入租户ID的概念,这样应用程序就能够基于租户ID来仔细研究为特定租户而更新或者检索的数据。这一场景的典型应用是设计之初就用作SaaS产品的应用程序。

共享企业服务总线

企业服务总线(ESB)通过从服务实现中解耦用户服务视图来支持SOA实现概念。

如果从实际实现中解耦客户服务视图,则有利于提高架构的灵活性。因此,当利用一个服务提供者替代另一个服务提供者时,客户不需要考虑架构的变更或替换。

有很多的ESB模式和相应的产品映射(请参阅参考资料中的相关红皮书)。我们当前的项目专注于利用WebSphereMQ和WebSphereMessageBroker的典型拓扑。

WebSphereMQ便于实现应用程序之间的通讯。WebSphereMQ中的队列可以作为应用程序之间交换的消息的容器。队列管理器管理着队列并且可作为队列的容器。WebSphereMessageBroker扩展了WebSphereMQ,可利用中介规则来操纵队列中的消息。

在一个多租户系统中,所有租户共享单个WebSphereMQ和WebSphereMessageBroker实例。在这种情况下,某个租户发送的信息必须与其他租户隔离。实现这一隔离的方法之一是为每个租户设置单独的队列管理器。租户特定队列管理器中的队列是相互隔离的,从而隔离了经过队列的消息。可以对队列管理器进行单独管理,这样,影响一个租户队列基础架构的问题就不会影响其他租户。

多租户系统当中的每个租户都可以有不同的中介规则集。为了让每个租户都有自己的中介规则,租户特定队列管理器可与客户租户特定中介规则相关联。这允许不同租户的中介规则相互隔离。

图4展示了在同一ESB实例当中运行两个不同租户的总体思路。

图4.多租户企业服务总线样式

多租户企业服务总线样式

租户特定报告

所有解决方案都需要报告。IBMCognosBusinessIntelligence(BI)提供全面的查询和报告功能,使得用户能够创建报告,并分析数据,制定出更好的商业决策。此外,CognosBI是一个成熟的平台,可以在能实现多客户共享资源的多租户环境中运行。

CognosBI将报告和报告元数据组合到文件夹结构中。通过数据源连接对象,报告能够访问被请求的数据,该对象为报告中所展示的数据定义了访问参数。

在所有租户共享一个CognosBI实例的多租户环境中,可通过创建租户特定文件夹和数据源连接来实现租户之间的隔离。来自租户的用户仅能访问为该租户创建的文件夹和数据源连接。这强制了租户之间的隔离,这样它们就无法查看彼此的数据或者报告。

IBMCognosSoftwareDevelopmentKit使得开发人员能够无缝地实现多租户,并将Cognos功能集成到其多租户应用程序当中。例如,当有新租户注册时,激活处理程序会通过发起Web服务调用来透明地访问CognosBI,从而创建仅有该租户可见的新文件夹和数据源连接。

租户特定日志文件

由于租户共享相同的中间件,所以需要着重考虑如何将各个租户的日志文件分开,让每个租户仅能访问由其自身执行所生成的日志消息。根据租户来分出跟踪文件和日志文件,有助于SaaS管理员排除特定账户的故障。

可通过简单地扩展WebSphere日志框架来创建租户特定日志文件。此外,每个产品都有不同的目录结构,因此,不同产品存储日志文件的位置不同。

日志聚合工具能够帮助租户将多个软件产品的日志文件聚合到单个归档文件中。

基于WebSpherePortal的统一租户界面

WebSpherePortal能够统一展现不同的、用于集成到一个SOA解决方案中的不同组件、应用程序、流程和内容。例如,在图2当中,可通过WebSpherePortal来实现无缝单点登录体验,这样,在用户登录到门户当中后,无需重新输入用户ID和密码,便可访问所有相关的软件。

此外,我们发现以下WebSpherePortal功能对于创建多租户应用程序特别有用:

门户组件模型portlets支持创建可在多SaaS应用程序中使用的可重用组件。它提供一种标准编程模式,这样租户就能通过提供其自定义portlets便捷地扩展SaaS解决方案。

通过门户自定义,租户就可以通过修改样式表来自定义其具有个性外观的UI。

可以基于角色访问portlets。当向租户增加用户时,可通过在共享LDAP中设置其各自的角色,自动为用户提供正确的portlets;例如,公司管理员与公司销售。

移动及多设备支持。可通过移动设备来访问大多数SaaS应用程序。IBMMobilePortalAccelerator使得您能够在不需要针对设备进行开发的情况下快速支持多个设备。

WebSpherePortal7.0对门户场(portalfarm)的支持使得它特别适合在云环境中运行。门户场是门户服务器的一系列独立实例,有点像传统的集群,但在管理和升级时要方便很多。可根据性能要求自动地扩大或缩小场的规模。

回页首

结束语

在本文当中,我们继续分享了我们在构建运行于IBMSmartCloudEnterprise之上的多租户应用程序的过程中获得的经验与教训。

尤其值得一提的是,我们描述了用来将现有单租户SOA应用程序转换为多租户SaaS应用程序的技术。我们希望随着时间的推移,随着SaaS市场的日趋成熟,能够出现一些新的工具来帮助完成更复杂的转换。

致谢

作者对IBM公司的TonyCarrato对本文的帮助表示感谢。

参考资料

学习

深入了解IBM软件行业解决方案。

描述多租户的两篇文章包括BestpracticestoarchitectapplicationsintheIBMCloud和基于云的、以资产为中心的协作最佳实践。

红皮书Patterns:SOADesignUsingWebSphereMessageBrokerandWebSphereESB解释了如何使用IBMTivoliDirectoryServerLDAP实现。

查找更多关于CognosBusinessIntelligence的信息。

查找更多关于IBMMobilePortalAccelerator的信息。

查找更多关于WebSpherePortalfarmtopologies的信息。

文章将您的web应用程序转化为多租户SaaS解决方案详细介绍将Web应用快速转换成云应用程序的思路与步骤。文中还着重介绍了来自Corent用于协助完成任务的工具。

如欲深入了解如何在IBM云中执行任务,请访问以下资源:

从Windows实例上传和下载文件。

在Windows2008R2中安装IISWeb服务器。

利用Linux命令行来创建IBM云实例。

利用Windows命令行来创建IBM云实例。

使用IBMCloud扩展您的公司网络。

IBMCloud中的高可用性应用程序。

动态自定义云映像实例的参数。

面向Windows的IBMCloud产品。

IBMSmartCloudEnterprise技巧:使用快速部署服务部署产品。

利用代理来集成认证策略。

IBMSmartCloudEnterprise技巧:配置LinuxLogicalVolumeManager.

IBMSmartCloudEnterprise技巧:部署复杂的拓扑结构。

提供和配置跨越公私VLAN的实例。

IBMSmartCloudEnterprise技巧:从Android设备实现安全访问。

在IBMSmartCloudEnterprise中恢复数据。

云中的安全虚拟机实例。

在developerWorks云开发者资源中,发现并共享有关应用程序和开发者在项目中构建的用于云部署的服务的相关知识和经验。

了解如何访问IBMSmartCloudEnterprise。

加入云计算讨论组,了解和讨论云计算的最新技术、解决方案、趋势等内容。

获得产品和技术

查看用于IBMSmartCloudEnterprise的产品镜像。

讨论

阅读所有developerWorks中精彩的云博客。

加入developerWorks中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他developerWorks用户交流。

相关推荐