将应用程序集成到云设备中:18 个实践

帮助您在云设备中安装一个恰当配置的应用程序的最佳实践

越来越多的应用程序所有者想将他们的应用程序托管在云环境中,如果应用程序比较复杂或者对执行环境有很强的依赖项,那么这可能是一项挑战。将应用程序部署到云中的一个常见场景是一个拥有非云软件的场景,您想要将这些非云软件集成到已在云中运行的软件中,要做到这一点,有几个特性需要计划(如果您仍在修复有问题的应用程序)或集成(如果应用程序已存在)。在本文中,作者提供了 18 个最佳实践,确保您的应用程序可以轻松地集成到另一个云产品中,轻松地集成到另一个云设备中,或作为一个独立设备托管在云中。

Sheetal Jharia, 资深软件工程师, IBM

Sheetal Jharia 是 IBM-ISL 的一名资深软件工程师(同时也是 IBM Cloud OS 开发主管),目前在从事 IBM Systems Director VMControl 开发,这是 IBM Cloud 组合中的一个关键产品,她有 8 年的 IT 经验,并拥有印度马德拉斯理工学院电子和通信系统工程学士和硕士学位。



Ashish Billore, 开发经理, IBM

Ashish Billore 是 IBM 印度实验室的一名 IBM Cloud OS 开发经理。他管理 IBM Systems Director VMControl 开发团队并负责开发构建云基础架构的可重用组件。他使用 Java、Eclipse、OSGi,以及 Web 服务等技术开发应用程序。他也为 Eclips 开源平台贡献了几个补丁,在 IBM technology 和 QSE 会议上发表过文章。他拥有电子和通信工程学士学位,并准备学习信息技术研究生课程。



2012 年 10 月 29 日

本文提供几个设计和打包应用程序到云环境中的最佳实践,这样此应用程序就可以:

  • 集成到另一个云产品中,以便其他产品利用其功能。
  • 集成到一个已在云中托管的应用程序。
  • 作为一个独立设备托管在云中。

如果您对这些场景感兴趣,那么可以通过阅读本文了解我们已经融入最佳实践中的一些经验,从而实现这些目标中的任意一个目标。

首先,我们来对这些场景进行详细探讨。

3 个场景

我们再次说明这些场景包含:将一个应用程序集成到现有云产品,将一个应用程序部署为整个设备包的一部分,或者将应用程序集成到一个现有云设备。

将您的应用程序集成到另一个云产品中

目前需求是增强现有云应用程序以及您的应用程序功能。目标是实现无缝集成。

通常,在需要将新功能引入到现有的产品时,就会涉及从头开始设计和开发新功能;另一个可选方案是利用一个现有产品(这种情况下,不需要启用云),将其功能集成到云产品。在这种情况下,您必须确定您的应用程序可以与现有云产品正确 “连接”。

将您的应用程序添加到另一个在云中托管的设备

一个云设备由预安装和预配置软件和应用程序构成;有时也可用作一个自包含服务器。当您计划添加一个附加应用程序到现有云设备包以增强其功能时,确保您的应用程序可与软件包中的其他应用程序和配置文件以及设备资源依赖项正确交互。

将您的应用程序作为一个独立的云设备进行托管

将您的应用程序用于云环境的一个方法是在其自身的云设备中使用,特别是如果不需要将它与另一个云应用程序集成时。

在继续之前,了解一下我们所说的设备、应用程序和虚拟机是很有帮助的:

  • 虚拟设备:一个预构建软件解决方案,由一个或多个虚拟机组成,虚拟机作为一个单元进行包装、维护、更新和管理。开发人员通过开发自包含和优化应用程序栈来创建虚拟设备,这些栈是为其工作负载定制的,并嵌入一个所择的操作系统;这些设备比传统软件更为安全可靠;只需要复制一组文件,并开启虚拟设备,即可使用该应用程序。
  • 应用程序:一个支持云的应用程序;它可执行一个功能或一组功能。它是设备中应用程序栈的一个组件。
  • 虚拟机:创建一个严密隔离的软件容器,以运行在虚拟化平台上的。它包含了 4 个虚拟化资源:CPU、RAM、存储器和网路。

在本文中,单词 “产品” 用来指 “应用程序” 或 “设备”,具体取决于上下文。

现在,让我们来看看可以帮助这些场景成为现实的最佳实践。


实践 1:支持静默安装

在安装过程中不显示消息或窗口的安装称为静默安装。静默安装并不是无人干预的安装。无人干预安装 是一个无需用户交互的安装;静默(或寂静)安装是不显示任何进程指示的安装。

您必须在您的产品中支持静默安装以及交互式/GUI 安装,以便客户能够选择这两种方法中的任何一个来安装产品。对于静默安装,用户需要的输入应在一个响应文件中给出,该响应文件只需要在安装开始时编辑一次。安装开始后,则不需要用户数据,也不会向用户显示安装过程/窗口。

当将一个应用程序集成到另一个应用程序或一个设备时,它就成为单一产品的一部分,单个安装程序是首选创建的。如果您的产品不能以静默方式安装,对您的产品来说,在单个安装过程中信息来自用户请求,而此时设备团队可能不想显示/询问其用户。这对用户来说是一种麻烦,对于他们来说并不需要了解这些基础产品的详细信息。如果静默安装不可用,您将失去已经取得的高效性,因为对于用户来说,就像是安装两个不同的产品。


实践 2:控制磁盘空间使用

您的系统资源应该能够自动地缩减所占的磁盘空间以帮助控制磁盘使用。如果将您产品的功能和流程会产生日志并跟踪数据到一个输出文件,设备服务器中应该有一个流程以限制该数据流来防止内存不足问题的出现。

创建一个属性文件,定义即将生成的输出文件的大小和数量。这些值应该能由系统管理员编辑。创建一个进程以监控这些文件。

如果输出文件的大小或数量均超过属性文件中设定的极限,可采取下列步骤之一:

  • 可以删除旧文件,或使用新文件替代它。
  • 系统管理员可收到情况警告。
  • 您可以阻止新数据写入日志文件。

您还应该提供一个可配置的编程式(动态)选项,以进行下列操作:

  • 将日志重定向到任何指定位置:在设备环境中,系统管理员可能想要让所有日志文件放在一个地方便于监控和收集日志。您的产品中有一个选项可用于选择日志存储位置。
  • 命名和重命名日志:这些文件名以及日志存放位置应该由用户根据自己的标准和方便指定。要提供更大的灵活性,也应提供重命名日志文件的功能,记住,您的产品在未来可能会成为一个大型高级设备的一部分。
  • 通过提供日志输出流选项将该日志嵌入到任何其他日志:高级特性意味着将您的日志嵌入到其他日志的灵活性,提供适当的输出流是设备环境所支持的。

实践 3:设置应该由 API 或 CLI 来完成

您必须能够通过 API 或命令行界面访问和操作所有配置设置。由于 REST Web 服务提供的松耦合性、轻量级以及可互操作性,它们是非常流行的,可能是您最常遇见的一个。如果其他流程需要手工更改一些属性文件或其他文件,可采用它以便于 CLI 或 API 完成那些更改。

如果在设备或者设备部分整体功能的安装过程中需要完成一个特定设置或配置,使用这些 ACL 或 API 来完成。设计应该是这样的,设备不需要了解应用程序的内部设计就能够对设置进行任意更改,你应该可以使用 CLI 来完成。

另外,无论在何处更改这类配置或设置无论在何处更改,在理想情况下,应及时生效,而不需要要重启应用程序;这样就不会扰乱整个设备的运行。


实践 4:跟踪和日志信息必须通过 API/CLI 收集

当产品中出现问题时,要完全诊断清楚,从产品中收集日志是非常重要的。采用命令行机制(或其他)来执行选择性或隔离诊断操作;操作将不会影响整个设备。这包括收集可直接被管理员所用的日志/跟踪信息的功能。


实践 5:高可用性支持是一个很好的优势

大多数 IBM 设备尝试支持高可用性;客户也有此需求。如果您的产品不支持高可用性,那么该设备的整个高可用性功效就会大打折扣。让您的产品在开发初期就完成高可用性设计或者留有一定空间将来开发,都是一个不错的主意。


实践 6:提供生命周期功能

任何作为您应用程序的一部分运行的进程、线程或守护进程必须有其自己的生命周期功能。它应该提供开启、暂停和停止的常见状态,而且应该有一个方式可让产品自己使用 CLI 或 API 控制这些状态。


实践 7:所有配置均应是可重配置的

预安装阶段假设的任何配置必须在设备创建时能够进行重置(Reset),也可选项根据用户需求重新配置。

您的产品可能在某种设置下作为一个个体运行(例如,IP 地址、端口设置或网络设置),但是,当它与其他产品集成时,由于客户工作环境或者产品整体需求,这些参数可能需要更改。这类设备在产品集成、设备创建或客户部署过程中必须是可重置和可更改的。


实践 8:能够在设备中激活和禁用应用程序

该特性是一个可选特性,但却又是一个很重要的特性。这对您的应用程序来说是一个很强大的优势,可通过使用一个命令行、API 或 GUI 激活或禁用应用程序,这样产品相关文件仍然驻留在磁盘中,但是不能消耗其托管系统的 CPU 和内存资源。这样,您就可以将您的产品嵌入到另一个产品中,在需要时通过开启或关闭来使用它。在云中,一个设备可以通过解除相关特性来关闭它所提供的某些服务,即使是在该应用程序正托管初始产品的时候。


实践 9:能够在设备中应用补丁

如果有一个更新或补丁可供您的产品使用,您必须能够将其应用到设备的集成环境中。一旦您的产品集成到另一个产品中,您的团队就无需停止其增强工作;您只需在设计阶段为您的产品定义一个更新路径。

因为您的应用程序未来可能被集成到其他云设备中,因此在集成环境中必须支持补丁修补。

另外,您的应用程序应有打包的更新、修复和补丁程序,这样它们可以包含在设备的其他更新中,或者与它们捆绑在一起。而且它应该能够通过重启应用程序完成修补/更新过程。

包括一个允许撤销已应用更新或补丁的条款是非常重要的,以防发现更改与其余设备不兼容。


实践 10:命令应可在任何 shell 中运行

尽量确保所有命令不受限于任何特定 shell。与您应用程序相关的 CLI 命令(至少是最重要的那个)不应限制为只能在某个 shell 上运行。集成到您产品的设备可能在不同的 shell 上运行,不一定是您选择的那个;在这种情况下,您将不能运行 CLI 命令,仅仅因为 shell 不同。


实践 11:许可密钥功能应在密钥安装时触发

一个许可密钥支持的功能应该被连接到常用设备 GUI 或 CLI,在密钥安装时触发。如果您应用程序中的任何一个功能也支持许可密钥,那么,该特性必须进行适当设计,并且从一开始就将该特性集成到设备的场景 GUI 中,如果您应用程序的其他组件许可证被应用,同样能够被常用 GUI 检测到,并通知正在使用该设备的用户。这为客户提供了一个很清晰的概念,哪些许可他已经使用了,哪些他需要申请或购买。这也可以帮助云管理员高效地维护各种许可证。应用程序应该提供一个 API 来查询许可信息以及对其进行应用或更新,无需重启。


实践 12:应启用版本标记

这是一个重要的需求,您的应用程序中应有一个条款,当一个产品包含在另一个产品或设备中时,应当给它一个新的名称(使用产品名和版本号)。

设备所有者可能想要为您应用程序提供的功能赋予一个新名称,以便使用一个与该设备共同目标更为一致的名称对其进行描述。

版本号也应该能够通过设备进行重写,这可以通过多种方法实现,一个方法是将一个描述产品名和版本号的文件作为一个常量,该常量可由设备管理员进行更改(当然,使用正确权限)。


实践 13:有一个可以彻底终止程序的 API

为通过 API 实现应用程序完全硬停机做好准备。在您的应用程序中如果需要突然退出某个程序时(比如强制关机或没有响应时),应该有一个 API 可以彻底终止您产品中的进程和线程,而不会损坏数据或对设备产生负面影响。


实践 14:使数据备份和恢复可用

通过 API 以多种格式创建数据备份和还原,比如普通文件、数据库转储等等。开发一个命令行功能(GUI 则不是必要的),可以备份与您应用程序相关的所有数据,在需要时进行恢复。

在设备中重新安装产品时,非常有用。您产品需要旧数据能够执行与之前相同的流程和功能。这对于增强设备的弹性和高可用性也是很有帮助的。


实践 15:应用程序应是独立的、自给自足的

这是一个重要需求,以便于在设备中独立包含或排除或更新您的程序。尝试包含、排除或更新您的应用程序时,系统管理员不应与应用程序在外部数据、设置、配置或环境方面的依赖项产生冲突。


实践 16:API 应该能够将数据导入或导出应用程序

准备一些 API 从您的应用程序中查询数据或将应用程序中的数据写入其他位置,这是很不错的选择。同一个 API 也可用于管理用户查询或写入数据的权限。这简化了设备团队编辑应用程序其他特性的过程,并为他们提供了更多的模块化。


实践 17:提供一个编程式方法来管理用户

提供一个编程式方法来创建、删除或修改用户和角色,以及限制各种选项或功能。为了安全访问您的应用程序特性(也是安全访问设备功能),应该有一个编程式方法来限制和管理各个用户及其角色。GUI 可能是一个闲置界面,可用来创建用户和角色以及管理其各自的权限。


实践 18:最大限度地减少对外部的依赖关系

对于任何特定版本软件或供应商应该只有一个松耦合的关系。尽量避免在您的应用程序中使用对外部工具有密切依赖的工具。


结束语

这 18 个基本实践应该可以帮助您考虑对计划在云中运行的设备加以修改,特别是如果您计划将其添加到一个云设备时,不管其是否已在云中运行。

下一步是深入研究每个实践以查看它们的实际实现,了解每个实践对构建一个可以轻松集成到云环境中的有效云应用程序的影响。

参考资料

学习

获得产品和技术

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

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


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


忘记密码?
更改您的密码

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

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

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

选择您的昵称



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

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

标有星(*)号的字段是必填字段。

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

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

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=843044
ArticleTitle=将应用程序集成到云设备中:18 个实践
publish-date=10292012