探索 IBM SmartCloud Application Services

为虚拟模式创建一个新的模式类型

在重点研究 IBM® PureSystems™ 专家云系统中的虚拟模式时,IBM 云专家 Dominique Vernier 认为一些开发人员可能希望了解如何创建模式类型,模式类型是提供所有组件、链接、可伸缩性规则等要素来构建模式的一个框架。在本系列文章中,Dominique Vernier 专家将详细解释如何创建和增强模式类型。虽然作者使用的是来自 SmartCloud Application Services 的 IBM SmartCloud Application Workload Services,但是测试结果同样适用于 SmartCloud Enterprise 和 IBM PureSystems 系列。

Dominique Vernier, IT 架构师, IBM

/developerworks/i/p-dvernier.jpg最近几年,Dominique Vernier 主要致力于 Java 技术与云架构的相关工作。他还曾在相关公司工作过很久,在那里,他积累了关于消息传递、数据库、SOA、EAI、客户端/服务器、C/C++、以及现有框架等方面广博的知识。Dominique 还对电信、CRM、物流、以及保险等行业领域的知识有深入了解。他是 4 个有关状态引擎和资源管理的专利的拥有者或共同拥有者。目前,Dominique 正在 South-West Europe Cloud Center of Excellence 管理着用于私有或公有解决方案的智慧业务开发与测试云计算。



2013 年 1 月 22 日

作为一名好奇的 IT 架构师,在阅读了 developerWorks 文章 创建和定制虚拟应用程序模式 之后,我有一个问题:“创建模式类型有多困难”?因此,我准备为一台单独的服务器构建一个模式类型,这个项目虽然比较简单,但可以演示模式类型的基础概念。

本文为这一过程提供了指南,使用了 我的博客 中一篇更全面的系列文章中的步骤。每个小节都是完整说明的一个要目。为了深入挖掘相关细节,您需要访问链接,阅读完整讨论的 PDF 版本,或者阅读我的博客中的文章。PDF 是实际博客文章的副本,会定期更新;而实际博客文章的链接展示的可能是最新的信息,您可以在本文中找到新的博客文章。

另请注意:和大多数系列文章一样,每一段的内容都基于前面各段的内容,我研究了应用程序模型和物理模型的变化,以及如何通过测试来确保您的更改可以生效。

定义、概念、场景和设置

第一部分首先将描述模式类型模式 的区别:模式类型提供了构建模式所需的所有组件、链接、可伸缩性规则等。创建模式类型要做的工作要比根据模式类型创建模式多。

然后,我们会简要介绍以下场景:

  • 模式类型只包含一个服务器。
  • 该服务器有一个参数。
  • 部署过程将在开始安装时记录一条消息。
  • 部署过程将在部署期间的另一个时间点记录一条消息。

我们还介绍了三个重要的概念:

  1. 一个模式类型通常由一个插件组成,该插件包含模式类型的定义以及一个或多个插件,它们包含模式类型提供的功能,而插件的数量则由架构决定。
  2. 您可以将一个插件分解为两个主要部分:
    • 应用程序模型:定义设计虚拟应用程序模式所需的各种组件和链接。
    • 物理模型:定义必须在目标云上启动的各种虚拟机和脚本。
  3. 有两种机制可以将应用程序模型映射到物理模型:一个基于 Java™ 的代码机制和一个基于模板的机制(首选机制和推荐使用的机制)。

最后,我们介绍了本练习涉及的设置步骤:

  1. 创建一个工作空间。
  2. 导入模式类型和插件。
  3. 修改模式类型的名称。
  4. 编辑模式类型 JSON 描述。
  5. 为插件创建一个新的 Java 项目。
  6. 创建一个插件目录。
  7. 将 META-INF 文件、build.plugin.xml 和 build.properties 复制到插件目录中。
  8. 更新插件的 config.json 文件。

我还将讨论并提供以下内容的代码:

  • 应用程序模型:在 plugin/appmodel/metadata.json 中定义。您将了解如何设计和测试它。
  • 物理模型:包含一个 VM 模板文件,定义了应当部署的虚拟元素和应用程序模型的角色。

最后我们还进行了测试,为顺利进入第 2 部分做准备。

PDF 的第 1 部分 | 博客的第 1 部分


创建 Slave-Master 模式类型

下一个任务是创建一个 Master-Slave 模式类型;它有别于第 1 部分的练习,因为 Master 服务器和 Slave 服务器之间有一个链接,该链接从 Slave 服务器检索一些信息(如 IP 地址)来配置 Master 服务器。

第 2 部分的步骤包括:

  1. 检查应用程序模型,查看我对它做的更改,这些更改是在应用程序模型的 JSON 文件中完成的(第 1 部分)。我们还增加了一个链接类型元素,用它指定源和目标。
  2. 检查物理模型的变化,了解如何更新 OSGI 目录,并根据与 Slave 相关的 Master 重新构建各个部分。
  3. 了解如何进行测试以及会产生怎样的结果。

PDF 的第 2 部分 | 博客的第 2 部分


向模式类型添加静态可伸缩性

第 3 部分展示如何向 Master-Slave 模式类型添加静态可伸缩性。静态可伸缩性的意思就是在模式设计期间定义实例的数量。

首先,向 Slave 组件附加一个策略组件,然后为该策略定义属性,最后更改 Slave VM 模板,以便导入从应用程序模型收集的信息。(该功能十分重要,因为它还适用于 IBM Workload Deployer 和 IBM PureSystems 专家集成系统)。

PDF 的第 3 部分 | 博客的第 3 部分


向模式类型添加一个监控收集器

当然,为了实现动态可伸缩性(可伸缩性将对监控特性作出反应),您必须能够从服务器收集信息。这一部分的目标是能够监视某个服务器的给定目录中的文件数量,并用图形来展示它们。

涉及的步骤包括:

  1. 在一个元数据文件中定义将要收集的数据的格式。定义将在创建文件时进行。
  2. 创建收集器脚本,该脚本会在服务器上收集信息。可以使用不同的方法从服务器中收集信息,如 HTTP、WCA 等等;我选择使用脚本,因为它最容易理解。您还可以通过实现 ICollector 接口来实现自己的 Java 类。由于所有收集器都必须遵从这一接口,因此收集器的响应也必须遵循给定格式。
  3. 创建一些脚本,以便在服务器上上传元数据文件和收集器脚本。我为该角色修改了 install.py 文件。也可以使用其他方法来实现此功能。
  4. 注册收集器。要注册收集器,请使用命令 maestro.monitorAgent.register()。您应该在 configure.py 文件中执行这个操作。
  5. 为用户界面提供相应配置,以展示所收集数据的图形表示。您需要创建一个 monitoring_ui.json 文件来展示该图形。该文件应该放在 config.json 文件的旁边。

PDF 的第 4 部分 | 博客的第 4 部分


根据监控收集器进行伸缩

您添加了一个简单的收集器来计算某个目录中文件的数量;接下来,我们将了解如何利用这个收集器来根据提供的指标添加伸缩规则。

要实现该场景,需要修改一些文件:

  1. 在设计模式时捕捉伸缩规则参数:
    • 要监视的文件目录。
    • 最小/最大阈值,表示文件的数量。
    • 您希望扩展的虚拟机的最大/最小数量。
    • 反应时间。
  2. 将这些值反映到拓扑中。
  3. 更改脚本,创建要监视的目录,并将参数传递给收集器。

必须修改应用程序模型的元数据文件,从而捕捉伸缩规则的各个参数并定义伸缩策略。还必须修改 VM 文件,将伸缩策略属性加入拓扑中。

对于脚本,在前面的小节中,我在脚本中硬编码了要监视的目录。我是在安装脚本中执行此操作的,但是现在,由于这是一个角色参数,所以必须将它放到角色脚本中,或者将它放到 configure.py 或 start.py 文件中。显然,这是一个配置角色,因此需要将它放到配置脚本中。

PDF 的第 5 部分 | 博客的第 5 部分


向操作添加关联

在模式类型中定义一个角色时,可以将该角色与一些操作关联起来,以便在部署该模式时启动这些操作。在本例中,我向角色添加了一个 “向日志发送字符串” 的操作。

要实现某个操作,需要额外添加名为 operation.json 的文件,将它放到 appmodel 目录中 metadata.json 文件的旁边。该文件指定了需要启动的脚本,而该脚本必须位于 part role 目录中。

在每个角色的 operation.json 文件中,可以定义大量操作;每个操作都有 id、书签、描述、分类、脚本和一个属性列表。通过使用分类,可以在 UI 中将大量操作组合在一起。因为该脚本是一个 Python 脚本,所以必须将它放在 role script 目录中。属性会显示在用户界面上。

实现一个非常简单的脚本。该脚本仅检索代码 stringToLog 属性值,并将它发布到日志文件中。您可以使用下面的语法检索属性值:maestro.operation['parms'][{attributeName}];,其中的 attributeName 是您希望检索的属性的名称。该脚本必须放在 role script 目录中。

PDF 的第 6 部分 | 博客的第 6 部分


根据操作系统指标进行伸缩

前面有关伸缩的段落 中,我介绍了如何使用您自己的监控收集器进行伸缩(计算某个目录中的文件数量)。您还可以在一个伸缩策略中重用一些嵌入式 OS 指标。重用现有的指标要求更改两个文件:应用程序模型(收集伸缩策略的属性)和拓扑文件(定义规则并实现该策略)。

在应用程序模型文件中,您需要定义伸缩策略并捕捉该策略的所有属性。这非常类似于我们为自己的监控收集器定义策略的情况。与定义大量文件和一个目录来监视属性有所不同,我们将定义一个 cpuUsage 属性,它是一个百分数。定义一个用于服务器角色的策略类型元素。该策略分两个部分:一个适用于静态伸缩策略,另一个适用于基于 CPU 的策略。

对于基于 CPU 的策略,可以定义三个属性:cpuUsagescaleInstanceRange1triggerTime1。您可以自己选择名称;注意,该名称必须与此后定义的属性列表中的属性 id 相匹配。组中的属性引用的顺序定义了在模式编辑器中的显示顺序。

接下来,您需要定义每一个属性;例如,对于 cpuUsage,可以将它定义为一个范围,并且必须将它显示为一个百分数,默认的最小值和最大值分别为 1 和 100。

在拓扑文件中,需要注入在应用程序模型中捕捉到的属性,使用它们来定义伸缩规则。此操作是在 VM 文件的 scaling JSON 属性中完成的。您可以使用一个 Velocimacro 场景在拓扑中插入元素。

PDF 的第 7 部分 | 博客的第 7 部分


扩展现有的模式类型

一名客户向我提出下列问题:

我有自己的日志事件系统,想将 WebSphere® Enterprise Application 环境的所有日志文件信息复制到我自己的日志事件系统中,但又不想为了添加一个新功能而重新创建完整的 WebApp 模式类型。那么,我该如何利用现有的 WebApp 模式类型并添加所需的功能?

答案很简单:扩展 WebApp 模式类型,添加一个插件来执行您所需的功能。幸运的是,扩展一个模式类型非常简单。您只需牢记模式类型是由模式类型定义和大量附加的插件构成的。每个附加的插件通过各个 config.json 文件中的几行代码指定它与模式类型的关系。

您需要做的是创建一个新插件,它将链接到目标模式类型(本例中为 WebApp)。然后向 metadata.json 文件添加一些新组件。

PDF 的第 8 部分 | 博客的第 8 部分


添加对虚拟应用程序实例进行微调的能力

操作非常重要:它们提供了在已部署的模式或虚拟应用程序上采取相应措施的能力,比如设置参数和根据这些参数进行处理。启用一个脚本就可以实现这个目的,该脚本是在应用程序模型中创建的 operation.json 文件中指定的。请参阅如何 向模式类型添加操作

操作模型使您通过参数对运行的模式启用脚本,但也可以使用另一种方法:微调。两者的区别在于,微调后的参数可在存储库 (storehouse) 中永久保存,可以在所运行模式的生命周期内的任意时间进行重用。

微调在已部署的模式中提供了相同的功能,但是参数可以持久保存。您可以使用微调参数重新生成一个崩溃的服务器,并将其设置为早期的版本。这方面的一个示例是 WebApp 模式中的 WAR/EAR 文件;在将它设置好后,该文件路径将永久保存到已部署的模式中。

微调后的参数可以链接到组件属性。

在应用程序模型中,您需要创建 tweak.json 和操作文件。在 tweak.json 文件中定义您的微调参数。

您可能会问 “如果要进行微调,为什么还需要一个操作文件”?您需要使用一个操作文件 ("id": "configuration",),让使用户界面显示 “tweak”。

持久存储是在 parameters.json 中完成的,该文件位于存储库的已部署模式中。

不需要在拓扑文件 (VM) 中进行特殊的处理,除非您希望使用 maestro.parms 函数来检索值。

PDF 的第 9 部分 | 博客的第 9 部分


在 SmartCloud Application Services 上将存储器附加到虚拟机

我曾经考虑过如何将存储器添加到在 SmartCloud Application Workload Service 上开发的模式类型生成的虚拟机:事实上,这很简单。您只需更新您的拓扑模板来请求存储器,然后在 vm-templates 数组元素中引用该存储器。

使用一个简单的 VM 文件,通过在 JSON 文件中添加 storage-templates 数组来添加存储器请求,通过在 vm-templates 元素中添加一个存储器数组元素来添加对该存储器请求的引用,然后构建您的插件并进行部署。

一旦完成了模式的部署,就可以进行连接并检查是否已安装了存储器,并且该存储器的大小是否合适。

还要注意的是:SmartCloud Application Workload Service 使用 GB 作为单位来指定其存储器大小;SmartCloud Enterprise 允许您以 GB 和 TB 为单位发出请求。

PDF 的第 10 部分 | 博客的第 10 部分


结束语

本文简要介绍了如何在 SmartCloud Application Services 中创建和修改模式类型,希望这篇摘要能够为您构建可重用的模式类型提供一个良好的开端,虚拟类型是用来创建虚拟模式的构建基础。请记住,只要单击本文提供的链接,便可获得每个部分的详细介绍。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 社区。探索开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户进行交流。

条评论

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=855793
ArticleTitle=探索 IBM SmartCloud Application Services
publish-date=01222013