跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

这是您第一次登陆到 developerWorks,已经自动为您创建了您的概要文件。 选择您概要文件中可以公开的信息的信息(如姓名、国家/地区,以及公司),这些信息同时也会与您所发布的内容相关联。 您可以随时更新您的 IBM 账号。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

使用插件在 IBM PureSystems 上部署新应用程序,第 1 部分

启用实际 SugarCRM 解决方案的设计考虑事项与开发工作

Chin Huang, 云解决方案架构师, IBM
Chin Huang 是一名专攻 IT 和软件架构的云解决方案架构师。他具有开发高级解决方案方面的专业经验,这些高级解决方案中包括 IaaS 平台、SaaS 集成、分析云、Web 服务和 IWD 插件。Chin 是一名认证的云计算解决方案顾问和 10 多篇技术论文的作者。他在加利福尼亚的硅谷生活和工作。
Ton Ngo, 云解决方案架构师, IBM
/developerworks/i/p-tngo.jpg
Ton Ngo 是位于加利福尼亚圣何塞的一名云解决方案架构师和高级开发人员。最近他是新加坡南洋理工大学的高性能云计算以及加拿大皇家银行的测试和开发云方面的架构师。之前他在 IBM 托马斯·沃森研究中心和阿尔马登研究中心担任了 17 年的研究员,并且发表了各方面主题的论文。

简介: IBM® PureSystems™ 是一个企业级专家集成系统,囊括一系列的云系统(以最佳实践模式的形式提供),包含应用程序、服务、硬件甚至专业技能,IBM PureSystems 的引入将云计算推向一个新高度。让一个应用程序准备好利用 IBM PureSystems 的一种方式是制作插件来充当应用程序包与系统之间的桥梁。在本文中,作者(IBM 云实验室团队专家)将描述在 IBM PureSystems 上实现 SugarCRM(一个独立软件供应商应用程序)的开发工作。

发布日期: 2012 年 5 月 21 日
级别: 初级 原创语言: 英文
访问情况 : 4431 次浏览
评论: 


IBM PureSystems 是一个企业级专家集成系统,囊括一系列的云系统(以最佳实践模式的形式提供),包含应用程序、服务、硬件甚至专业技能,IBM PureSystems 的引入将云计算推向一个新高度。让一个应用程序准备好利用 IBM PureSystems 的一种方式是制作插件来充当应用程序包与系统之间的桥梁。

在这个由两个部分组成的系列文章中,作者将介绍设计时需要考虑的事项、开发工作以及从项目中汲取的经验。第 1 部分将描述在 IBM PureSystems 上启用 SugarCRM(一个独立软件供应商应用程序)的开发工作。SugarCRM 是一个需要使用 LAMP 栈(Linux®、Apache、MySQL 和 PHP)的 PHP 应用程序。IBM PureSystems 没有为 LAMP 提供开箱即用支持,因此团队开发了一个新的模式类型和一组插件,支持在基本 Linux 和 IBM AIX 映像之上建模、部署和运行应用程序。第 2 部分 将讨论从项目中汲取的一些经验。

IBM PureSystems 管理一个应用程序的整个生命周期。我们首先咨询 IBM PureSystems 主题专家,与 ISV 举办研讨会,并试验应用程序,以便深入了解 SugarCRM。因为涉及到了开源和供应商软件,所以我们还需要考虑许可问题。支持的数据库包括 MySQL 和 IBM DB2®,对于 IBM 来说,这更具有战略性。透彻的理解能够让我们更好地规划插件架构,并定义 IBM PureSystems 如何支持 SugarCRM 的每一个周期。

在建模应用程序时,插件允许用户拖放一个 SugarCRM 框并连接到数据库框,数据库可以是 MySQL 或 DB2。MySQL 作为一个现有服务器加以建模,而 DB2 可以是一个新的或现有的服务器。

在用户向云中部署 SugarCRM 应用程序模式时,插件的脚本自动化所有中间件和应用程序的安装和配置。脚本与 IBM PureSystems 交互以获取部署信息和提供状态更新。

在部署应用程序之后,插件允许用户启动和停止 Apache 服务,并从 SugarCRM 查看日志。

我们从项目中获得了一些宝贵经验,理解了在云中启用应用程序的插件开发和思考过程。在开发过程中,我们定期从 IBM PureSystems 插件开发团队寻求指导,并且提供对 Plug-in Development Kit (PDK) 的反馈。我们的一些反馈促进了开发团队的一些新工作项和新最佳实践的生成。我们还咨询了产品团队,确保我们的设计与 IBM 战略方向一致。

确定挑战

SugarCRM 是提供客户关系管理解决方案的一个 ISV。SugarCRM 解决方案的优势包括,直观的用户体验和高度灵活的开源平台。解决方案有四个版本可用,并且可现场部署,托管给公司或在云中托管。

何为 SugarCRM

SugarCRM 解决方案是一个通常在 LAMP 栈(Linux、Apache、MySQL 和 PHP)上运行的 PHP 应用程序。可以使用其他支持软件(比如 Alternative PHP Cache,即 APC)来改进性能,并且可以使用 memcache 来实现横向扩展。

IBM PureSystems 在初始设置时并没有提供 LAMP 栈支持。云实验室团队开发了在 IBM PureSystems 上运行 SugarCRM 所必需的支持。

定义业务场景

第一步是保持业务目标与技术解决方案一致。对于希望运行 SugarCRM 应用程序的 IBM PureSystems 客户,我们确定了以下业务场景来支持端到端体验(从启用应用程序到运行应用程序)。

  • 在 IBM PureSystems 中启用 SugarCRM 和开源软件。
  • 建模和配置 SugarCRM 应用程序。
  • 在 IBM PureSystems 云中部署和运行 SugarCRM 应用程序。
  • 管理 SugarCRM 运行实例的生命周期。
  • 支持两个数据库作为数据存储库:MySQL 和 DB2。

定义插件架构

为了定义插件架构,我们来更仔细地看一下典型的 SugarCRM 拓扑、设计考虑事项和许可问题会影响技术的开发。

SugarCRM 即 PHP 应用程序

表 1 中总结了 ISV 为 System x 和 System p 推荐的软件栈:


表 1. SugarCRM 的推荐软件栈
System xSystem p
Red Hat Enterprise Linux 5AIX 7.1
Apache 2.2Apache 2.2
具有所需扩展的 PHP 5.3具有所需扩展的 PHP 5.3
APC 3.1APC 3.1
MySQL 5.1DB2 9.7

来自 SugarCRM 的团队指出,典型的拓扑是连接到一台数据库服务器的单一 Apache 服务器,如图 1 所示。


图 1. 单一服务器拓扑
单一服务器拓扑

集群拓扑不怎么常见,它通过扩展 Apache 服务器的数量来应对增加的用户量,如图 2 所示。


图 2. 集群拓扑
集群拓扑

在本例中,SugarCRM 将 memcache 用作会话管理器,将 nginx 用作负载平衡器。由于要将应用程序写回到 Apache 托管的 PHP 文件和数据所在的本地目录中,所以多台 Apache 服务器必须共享同一个本地目录;这是通过在 NFS 服务器上托管目录来完成的。共享的文件系统还有助于更新到新版 SugarCRM,因为它允许同时升级所有服务器。

设计考虑事项

IBM PureSystems 中的一个基本概念是:向用户提供一个以应用程序为中心的云视图,使用户可以专注于应用程序,从而忽略底层基础架构。IBM PureSystems 管理应用程序的三个方面:建模、部署和运行。这三个方面涉及到的场景不计其数。下面是我们在进行选择时需要注意的考虑事项:

  • 虽然 IBM PureSystems 可以利用扩展策略来支持 SugarCRM 的集群拓扑,但我们的项目的范围仅限于单一服务器拓扑。
  • 尽管 MySQL 通常用作典型部署中的数据库,我们打算重点介绍 DB2,同时还将介绍 MySQL。这可以通过允许用户将 DB2 作为新的或现有的实例进行建模来实现 ,但是仅支持将 MySQL 用作现有实例。
  • Apache/PHP 软件栈是用于开源 Web 服务器的一个常见平台;因此可以在其他服务中重用支持此堆栈的新插件集合。我们最初的想法是要将这一堆栈建模为一个独立组件,将 SugarCRM 建模为与其链接的一个独立组件,以便让我们能够快速增加对新 PHP 应用程序的支持。我们担心这样一种应用程序模式不是非常适用于以应用程序为中心的方法,因为它会公开基础架构的软件栈部分,而且我们决定将 SugarCRM 应用程序和完全受支持的软件栈建模为单一组件。
  • 配置 SugarCRM 相对简单一些,仅需一小部分的参数。我们选择了与 SugarCRM 组件一起公开的一部分参数。
  • 配置数据库的一整套参数非常之多;我们仅公开了与 SugarCRM 相关的参数,并将其余参数设置为默认值。对于 DB2 和 MySQL 来说参数集是完全相同的,尽管它们属于不同的组件。

许可问题

通常许可问题在技术设计中没有多大的利害关系,不过由于一些 ISV 工作负载可能需要使用非 IBM 软件,所以您必须适当地管理软件和中间件许可。我们选定了以下这些方法:

  • 将软件捆绑在插件内。软件二进制文件或源代码包含在插件压缩文件中,在 IBM PureSystems 管理控制台中启用模式类型和插件之后,才可以使用它们。在模式类型启用过程中,云管理员会审查并接受软件许可协议。捆绑软件方法使软件与插件的开发和启用过程紧密集成在一起。

  • 让云管理员在插件启用过程中提供软件二进制文件或源代码。插件会连同模式类型包一起导入到 IBM PureSystems 中,并且保持在 “禁用” 状态。云管理员遵循典型的许可程序收集所需的软件,然后使用 IBM PureSystems 管理控制台中针对各个插件的配置选项。结果,插件被启用,且软件文件持久保存在 IBM PureSystems 存储库内。在这种情况下,软件许可协议流程是在 IBM PureSystems 环境外完成的。

  • 将软件二进制文件或源代码构建到基本操作系统映像中。在将虚拟机添加到 IBM PureSystems 目录时,云管理员需要接受许可协议。由于同一基本操作系统映像在多个模式类型和插件之间得到共享,该方法对于整个 IBM PureSystems 领域内的通用软件比对特定于插件的软件更有效。

SugarCRM 应用程序取决于某些第三方和开源软件,因此我们决定仅将 SugarCRM 文件捆绑到插件中,并在插件启用过程中接受其他 IBM 和开源软件的二进制文件和源代码作为云管理员的输入。


设计和开发

这些小节的顺序大体反映了开发 SugarCRM 插件时我们的设计和实现流程。

解决方案设计

主要的解决方案设计决策是确认插件的角色和职责。我们主要考虑以下两种方法:

  • 第一种方法是,开发一组通用插件来支持 Apache、PHP 和数据库连接,并使用 SugarCRM 作为插件的输入。这可以更加灵活地设计和交付能够以类似方式扩展到其他 PHP 应用程序的真正通用的 PHP 功能。

  • 第二种方法是,设计和实现特定于 SugarCRM 的 PHP 和数据库插件,确保 SugarCRM 应用程序具有完善的功能。以应用程序为中心的设计非常契合虚拟应用程序概念,使得更易于在所有相关方之间定义插件的所有权和职责。

鉴于 PHP 配置的高度动态性,我们选择以应用程序为中心的设计(即专为 SugarCRM 而设计)作为即时启用解决方案;我们的意图是通过实现模块化代码来重温更加通用和可用的方法。根据插件开发指南 中的 IBM PureSystems 插件交互指南,我们的三个插件设计用于提供不同的职责。

  • SugarCRM 插件
    • 定义和收集用于安装 SugarCRM 的用户输入
    • 安装所需的操作系统包
    • 安装和配置所需的软件,包括 Apache、PHP 和 APC
    • 复制和准备 SugarCRM Enterprise 包
    • 提供 SugarCRM 日志监控
    • 支持基本的运行时操作
  • DB2 链接插件
    • 定义和收集用于现有 DB2 实例的用户输入
    • 在与 SugarCRM 相同的应用程序模式中支持新 DB2 实例
    • 安装和配置所需的软件,包括 IBM 数据服务器客户端和 IBM DB2 PHP 扩展
    • 重新配置 PHP 以使用 DB2
    • 安装和配置 SugarCRM Enterprise,以 DB2 为后端数据库
  • MySQL 链接插件
    • 定义和收集针对现有 MySQL 实例的用户输入
    • 安装和配置所需的软件,包括 MySQL 客户端软件包
    • 重新配置 PHP,以便使用 MySQL
    • 安装和配置 SugarCRM Enterprise,使用 MySQL 作为后端数据库

考虑到 Apache 和 PHP 的开源性,我们的另一个重要决策是决定捆绑第三方软件二进制文件,还是动态构建必备软件。我们决定根据用户提供的源代码来构建这些软件,以提高灵活性和可扩展性。

解决方案打包

基于设计决策和许可考虑事项,可以将 SugarCRM 启用解决方案打包为多个文件,使用它们在 IBM PureSystems 中启用业务场景。

主要插件文件是由模式类型定义和四个插件组成的模式类型包。它包括我们开发用于 SugarCRM 应用程序建模、部署和运行的 Java™ 代码、JSON 配置、Python 和 shell 脚本。文件名为 sugarcrm-1.0.0.0.tgz。


表 2. SugarCRM 模式类型包内容
文件名TGZ 中的子文件夹描述
sugarcrm-1.0.0.0.tgz版本 1.0.0.0 的 Sugarcrm 模式类型定义
sugarcrm-1.0.0.2.tgzplugins支持 Apache、PHP、APC 和 SugarCRM Enterprise Edition v6.4.0 的 Sugarcrm 插件
sugarcrmdb2-1.0.0.2.tgzplugins支持 SugarCRM 连接到 DB2 的 Sugarcrm DB2 链接插件
sugarcrmmysql-1.0.0.2.tgzplugins支持 SugarCRM 连接到 MySQL 的 Sugarcrm DB2 链接插件
sugarcrm-samples-1.0.0.2.tgzplugins提供样例应用程序模式和模板的 Sugarcrm 样例插件

访问 SugarCRM 站点,下载这些打包的解决方案文件。

其他内容是插件启用文件,包含可免费下载的第三方产品和源码。云管理员可以选择构建自己的软件包或者下载预建的软件包,然后在 IBM PureSystems 用户界面中配置各个插件。由于 IBM PureSystems 支持的首批平台中包括 Linux,所以接下来我们将描述 Linux 的启用文件细节。


表 3. SugarCRM 插件启用程序包内容 (SugarLinux.tgz)
文件名TGZ 中的子文件夹来源描述
autoconf-latest.tgzLinux\SOURCEShttp://www.gnu.org/software/autoconf/PHPize 编译 PHP 扩展块需要的工具
httpd-2.2.21.tgzLinux\SOURCEShttp://httpd.apache.org/download.cgiApache 源程序包
PHP-5.3.8.tgzLinux\SOURCEShttp://www.PHP.net/PHP 源程序包
APC-3.1.9.tgzLinux\SOURCEShttp://pecl.PHP.net/package/APCAPC 源程序包

表 4. DB2 链接插件启用程序包的内容 (DB2LinkLinux.tgz)
文件名TGZ 中的子文件夹来源描述
ibm_data_server_client_linuxx64_v97.tar.gzLinux\Productshttp://www-01.ibm.com/support/docview.wss?rs=4020&uid=swg21385217IBM 数据服务器客户端 v9.7,用于构建 db2 扩展
ibm_db2-1.9.2.tgzLinux\SOURCEShttp://pecl.PHP.net/package/ibm_db2PHP 扩展 “ibm_db2” 的源代码

表 5. MySQL 链接插件启用程序包的内容 (MySQLLinkLinux.tgz)
文件名TGZ 中的子文件夹来源描述
mysql-shared-compat-5.0.92-1.rhel5.x86_64.rpmLinux\RPMShttp://dev.mysql.com/downloads/mysql/5.0.html#downloadsPHP 所需的 RPM,具有 MySQL 选项
mysql-devel-5.0.77-4.el5_4.2.x86_64.rpmLinux\RPMShttp://dev.mysql.com/downloads/mysql/5.0.html#downloadsPHP 所需的 RPM,具有 MySQL 选项

以 PDK 作为起点

可以将一个插件构造为一个 Eclipse 项目,从而利用一个灵活而强大的平台来开发它。不过,插件的内部组织需要遵守一套严格的规则和约定,以便可以将其构建为结构良好的程序包,并通过 IBM PureSystems 子系统来处理它。我们发现,在两个领域中都需要用到开发工具:入门和调试。因此,随附的 IBM PureSystems 提供了 Plug-in Development Kit (PDK),您可以从主页下载其 ZIP 文件。

PDK 提供了一组包含两个组件插件和一个链接插件的样例来帮助您入门。我们使用了样例插件作为学习示例,并且以修改样例作为开发的起点。隐含的规则和约定在开发过程中可能很难识别,而且在运行时,通常以难以理解的方式来表达产生的错误,导致调试变得很难。如果有违反这些规则的情况,这样的错误很可能在编译时就被检测出来。

PDK 还有助于通过调试插件完成调试。您可以将该组件拖放到任何虚拟应用程序模式中。它提供两种调试技术:

  1. 用户可以部署模式,无需将 VM 实际部署到云中,这样就可以对拓扑工件进行检查。在开发的初始阶段,当代码不起作用时,这样做会很有用,而且用户可以避免部署 VM 所需的冗长周期。
  2. 在将模式部署到云中之后,激活期间使用的文件保存在 VM 中,以便用户可以登录并调试代码。在开发后期,可以使用这些文件来调试 shell 和 Python 脚本。

使用模式类型

一种模式类型 是识别特定解决方案和拓扑的插件的集合。在开发环境中,一种模式类型显示为一个项目。开发人员可以在 patterntype.json 中定义名称、版本、描述和许可协议,并使用 PDK 提供的编译脚本来生成模式类型包文件。

我们将三个功能插件和一个样例插件打包在 SugarCRM 模式类型文件中。云管理员只需导入模式类型、启用它,并使用 解决方案打包 一节中描述的 TGZ 文件来激活功能插件。因为样例插件不需要进行配置,所以会在模式类型启用时启用它。

开发应用程序模型

与插件相关的组件、链接、策略和用户输入参数都建模在 appmodel/metadata.json 文件中。根据 设计注意事项 一节中描述的建模决策,我们将 SugarCRM 插件构建为仅支持组件,而将数据库插件构建为同时支持组件和链接。

  • 组件或链接的 id 属性必须是惟一的,且在转换中用作组件名。
  • type 属性标识组件、链接或策略。
  • 另外还可以指定组件的图形属性,比如 imagethumbnail

声明式方法能够让 IBM PureSystems 应用程序生成器与所有插件进行交互,收集用户输入,并在存储库内将应用程序模型持久保存为 JSON 文档。

以下 JSON 代码段展示了我们如何在相同的 metadata.json 文件中定义组件和链接。

{
	"id":"xDB2",
	"type":"component",
 	"thumbnail"  : "appmodel/images/thumbnail/existing_DB2_thumb.png",
	"image"      : "appmodel/images/existing_DB2.png"
}
{
        "id":"SugarCRMDB2",
	"type":"link",
	"source":[
            "SugarCRM"
	],
	"target":[
            "DB2",
            "xDB2"
	]
}

如图 3 所示,用户可以选择一个 SugarCRM 组件以及两个受支持的数据库组件 DB2 和 MySQL 之一。


图 3. 组件面板
组件面板

用户按需为每个组件填充参数(图 4 和图 5),然后简单地拖动并连接两个组件。DB2 组件可以是一台新服务器或现有服务器,且仅支持 MySQL 组件作为一台现有服务器。


图 4. SugarCRM 参数
SugarCRM 参数

图 5. 数据库组件参数
数据库组件参数

图 6 展示了 SugarCRM 和现有 DB2 的模式示例。为方便起见,SugarCRM 的模式类型中包含了几个现成的模板。


图 6. SugarCRM 和 DB2 的模式示例
SugarCRM 和 DB2 的模式示例

实现转换器

插件开发的一个重要任务是实现转换器。所有插件都提供转换器来将应用程序模型中的组件、链接或策略转换作为可由 IBM PureSystems 框架用于部署的拓扑文档片段。应用程序模型和拓扑文档都是 JSON 文档。

有两种实现转换器的方式:

  • 对于简单的模型,IBM PureSystems 有一个 TemplateTransform 类,该类允许插件开发人员使用 Apache Velocity Engine 将转换器写为一个基于 JSON 的模板。因此开发人员可以使用 JSON 和 Velocity 宏更直观地进行开发。
  • 对于更加复杂的模型,开发人员编写了一个扩展 TopologyProvider 类的 Java 实现,使用 Java 代码构建一个更动态且灵活的拓扑 JSON 对象。

我们为数据库插件选择了模板方法,因为转换相对简单明了。现有数据库组件和链接各有一个模板。这个模板片段展示一个现有 DB2 数据库的参数转换。

#set( $db_type = $provider.componentName.substring(1) )
{
    "name"  : "xDB2",
    "type"  : "xDB2",
    "parms" : {
        "db_type"     : "$db_type",
        "db_name"     : "$attributes.db_name",
        "db_hostname" : "$attributes.db_hostname",
        "db_port"     : "$attributes.db_port",
        "user"        : "$attributes.user",
        "password"    : "$attributes.password",
        "service"     : "$prefix"
    }
}

SugarCRM 组件转换需要更多功能,因此我们使用了一个 Java 实现来开发转换器。

OSGI-INF 目录下的 XML 文件中声明了 Velocity 模板或 Java 代码的使用。这个 XML 代码段显示,模板 templates/xdb2_component.vm 被用作了转换器。

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="xDB2">
 <implementation class="com.ibm.maestro.model.transform.template.TemplateTransformer"/>
	<service>
		<provide interface="com.ibm.maestro.model.transform.TopologyProvider"/>
	</service>
 <property name="component.template" type="String" value="templates/xdb2_component.vm"/>
</scr:component>

必须在清单文件 META-INF/MANIFEST.MF 中列出组件文档 OSGI-INF/*.xml。以下清单文件片段显示了用于 DB2 链接插件的两个组件文档。

Service-Component: OSGI-INF/SugarCRMDB2Transform.xml,OSGI-INF/xDB2Transform.xml

自动化脚本

支持 SugarCRM 的一组新插件包括这些组件:

  1. 现有 DB2:表示一台现有 DB2 服务器,执行必需的配置,比如为 SugarCRM 初始化数据库。
  2. 现有 MySQL:表示一台现有 MySQL 服务器,执行必需的配置,比如为 SugarCRM 初始化数据库。
  3. DB2 链接:表示 SugarCRM 与 DB2 组件之间的依赖关系,在 SugarCRM 和 DB2 服务器都就绪时执行最终配置。这包括将 DB2 服务器的 IP 地址传播到 SugarCRM 服务器。
  4. MySQL 链接:表示 SugarCRM 与 MySQL 组件之间的依赖关系,在 SugarCRM 和 MySQL 服务器都就绪时执行最终配置。这包括将 MySQL 服务器的 IP 地址传播到 SugarCRM 服务器。

在实际实现中,我们将这些插件的代码组织为以下 Eclipse 项目:

  1. SugarCRM component 作为一个单一项目。
  2. 现有 DB2 组件和链接作为一个组合项目。
  3. 现有 MySQL 组件和链接作为一个组合项目。

插件开发指南 描述了一个插件实现必须采用的 Eclipse 项目的定义完善的结构。图 7 和图 8 展示了三个 Eclipse 项目的内部布局,重点展示了我们的代码所在的插件目录。


图 7. SugarCRM 的插件实现
SugarCRM 的插件实现

图 8. DB2 和 MySQL 的插件实现
DB2 和 MySQL 的插件实现

用红色突出显示的文件是 IBM PureSystems 的切入点:它们包含安装和配置软件所需的 Python 代码。其名称和位置是固定的,因此激活引擎就可以在部署期间调用它们。

标准顺序是:

  1. install.py
  2. configure.py
  3. start.py

其余脚本支持从主脚本调用的脚本。与插件打包在一起的二进制文件位于文件目录中,且分别放在 Linux 和 AIX 目录中。同样,脚本也分别放在 Linux 和 AIX 目录中。

在一些实现中,脚本是单源的,这意味着它们被编写为同时在 Linux 和 AIX 平台上运行。在我们的示例中,我们发现实现在两个平台之间完全不同,因此我们认为分别维护它们会更易于管理。

注意在图 8 中组件和链接的代码在同一插件中的组织方式。

为了提高可用性,我们添加了一个具有预定义模式和模板的样例插件作为一个单独的 Eclipse 项目。包括的模式帮助最终用户快速获得一个可用的模式,且模板有助于实现快速部署。

图 9 显示了一个具有简单用户输入的模板部署界面。


图 9. 使用模板部署 SugarCRM 应用程序
使用模板部署 SugarCRM 应用程序

我们使用了 IBM PureSystems 应用程序导出功能来收集元数据并将解压缩的文件放到 /plug-in/applications 文件夹中,如图 10 所示。


图 10. 样例的插件结构
样例的插件结构

重用现有插件

在相同的应用程序模式中部署一台新 DB2 服务器以及 SugarCRM 代码时,我们希望尽可能利用 IBM PureSystems DB2 插件功能。我们与 IBM PureSystems 开发团队合作确认和明确了两个新功能:

  • 在新的自定义模式类型中重用现有插件。
  • 扩展插件功能和数据库配置。

在新的自定义模式类型中重用现有插件
我们希望在应用程序建模期间提供一个新的 DB2 组件,并配置一台新 DB2 服务器,以便在应用程序部署期间使用 SugarCRM。使用当前产品功能是不可能实现此操作的,因为 DB2 插件被定义并加载到 IBM PureSystems 中,以便使用已知的模式类型,比如 dbaaswebapp

我们请求了一个支持自定义插件的新功能,以指出插件定义中包含现有模式类型以及插件。因为开发了 IBM PureSystems 链接功能,所以可以在一个插件 config.json 中声明 “links” 子句,且框架会通过第二个模式类型声明来利用链接的插件,如同它们是相关联的一样。

结果证明,这是一个通用且有用的产品功能,它便捷地实现了所有模式类型的插件的可重用性。

扩展 DB2 插件功能和数据库配置
两个 SugarCRM 安装要求是:

  • 数据库服务器的全文搜索功能。DB2 有一个附加的全文搜索功能,默认情况下,在使用 DB2 插件进行 IBM PureSystems 虚拟应用程序模式部署时,没有启用该功能。
  • 缓冲池和表空间中的一个可定制数据库配置。

为了确保虚拟应用程序模式配置的数据库能够满足所有要求,我们与 DB2 插件开发团队明确地定义了适当的扩展点。构建并交付了一个新产品功能,即自定义数据库工作负载标准。它能够让最终用户创建一个新的数据库工作负载标准,包括要在每个扩展点运行自定义脚本的一个脚本包文件。可以在一个虚拟应用程序模式中使用自定义的数据库工作负载标准进行 DB2 配置。

为此,我们定制并打包了这些脚本:

  • tune_inst.sh:在首次安装并启动 DB2 之后定制 DB2 实例。
  • tune_db.sh:创建数据库之后定制数据库配置。
  • post_start_inst.sh:每次启动(或重启)DB2 时启动全文搜索。

通过这两个新开发的功能,我们成功地实现了为 SugarCRM 启用重用 DB2 插件的目标。


结束语

在本文中我们展示了设计方面的一些考虑事项,我们的团队将其用作一个模板来指导我们创建插件,从而能够在 IBM PureSystems 上部署现有的 SugarCRM 解决方案。我们还让您了解了我们所做的开发工作:

  • 开发三个插件来启用 SugarCRM。
  • 对插件进行打包。
  • 将 Plug-in Development Kit 中的样例作为一个起点(特别是用于调试我们的插件)。
  • 为我们的插件定义一个模式类型和应用程序模型(使其得到快速部署)。
  • 实现转换器,即将应用程序模型内容转换为可由 IBM PureSystems 用于进行部署的拓扑文档片段的 “引擎”。
  • 构建脚本来自动化实现和部署任务。
  • 构建两个新的模式类型重用和数据库配置插件功能来满足 SugarCRM 解决方案的需求。

不过,这里介绍的不是全部内容。第 2 部分 将详细介绍我们在为 SugarCRM 开发插件的过程中汲取的经验。

致谢

我想感谢该项目的主要支持人员:

  • 云实验室和 HiPODS 团队的 Willy Chiu、Larry Hsiung、Thomas Truong、Jeffrey Coveyduc、Kai Young、Nauman Fakhar、 Chris Kiernan 和 Raymond Wong
  • IBM Workload Deployer 开发团队的 Steve Ims、Lin Sun 和 Ted Kirby
  • IBM Database as a Service 开发团队的 Ning Wang 和 Qi Rong Wang
  • IBM Innovation Center 团队的 Nasser Momtaheni、Joseph Peterson 和 Rodney Johnson
  • SugarCRM 的 Stas Malyshev

参考资料

学习

获得产品和技术

  • 查看在 IBM SmartCloud Enterprise 上可用的 产品映像

讨论

作者简介

Chin Huang 是一名专攻 IT 和软件架构的云解决方案架构师。他具有开发高级解决方案方面的专业经验,这些高级解决方案中包括 IaaS 平台、SaaS 集成、分析云、Web 服务和 IWD 插件。Chin 是一名认证的云计算解决方案顾问和 10 多篇技术论文的作者。他在加利福尼亚的硅谷生活和工作。

/developerworks/i/p-tngo.jpg

Ton Ngo 是位于加利福尼亚圣何塞的一名云解决方案架构师和高级开发人员。最近他是新加坡南洋理工大学的高性能云计算以及加拿大皇家银行的测试和开发云方面的架构师。之前他在 IBM 托马斯·沃森研究中心和阿尔马登研究中心担任了 17 年的研究员,并且发表了各方面主题的论文。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, WebSphere
ArticleID=816945
ArticleTitle=使用插件在 IBM PureSystems 上部署新应用程序,第 1 部分
publish-date=05212012