SmartCloud Cloud Services Framework,第 1 部分: 创建一个混搭服务

使用服务描述符来建模您的服务交付

本文是由四部分组成的系列文章的第一部分,本文展示了如何在 IBM® SmartCloud Enterprise 的 Cloud Services Framework 中创建并注册一个混搭服务。作者还介绍了如何显示服务产品的详细信息,动态更新所显示的信息,显示来自第三方的数据,以及如何管理服务实例。请关注本系列的后续文章,这些文章将介绍如何配置包含多个组件的服务,并举例说明提供负载均衡和监控服务的代理 VM。

Alexei Karve, 高级软件工程师, IBM France

Alexei Karve 是 IBM Thomas J Watson Research Center 的一名高级软件工程师。他是 SmartCloud Enterprise 设计团队的成员,专攻云业务支持系统的软件包、服务和 VPN/VLAN 研究。Alexei 在操作支持服务、虚拟化和 Tivoli Provisioning Manager 方面有着广泛的经验。在 1993 年加入 IBM 之前,他拥有从事各种系统管理工作的经验。



Alla Segal, 顾问软件工程师, IBM

http://www.ibm.com/developerworks/i/p-asegal.jpgAlla Segal 是 IBM TJ Watson Research Center 的 Service Infrastructure Management 团队的一名顾问软件工程师。她最近的项目包括探索将多承租 SCA 解决方案自动部署到云环境中的方法。Alla 在软件设计和开发方面拥有 15 年以上的经验。她从伊利诺伊大学香槟分校获得了计算机科学硕士学位。



Eugene Chan, 顾问软件工程师, IBM France

Eugene Chan 是 IBM 多伦多实验室的一名顾问软件开发人员。他是 IBM SmartCloud Enterprise 团队的成员,专攻服务,特别是在服务管理领域。Eugene 在各个领域的软件设计和开发方面拥有超过 12 年的经验。在担任 SmartCloud 的职位之前,Eugene 是 Eclipse TPTP Tracing and Profiling Project 的一位活跃成员和项目负责人,并且是 Eclipse TPTP Architecture Group 的主席。



Ignacio Silva Lepe, 研究人员, IBM France

Ignacio Silva Lepe 是 IBM Research 的一名研究人员。他在面向对象的系统、组件软件、分布式消息传递系统、高级企业级中间件和 PaaS(平台即服务)等领域拥有超过 20 年的研究经验。在加入 IBM Research 之前,Ignacio 是 Texas Instruments' Corporate Research and Development 的成员。在此之前,他是 Northeastern University 的研究助理,在那里获得了计算机科学博士学位。他在墨西哥瓜达拉哈拉的 Universidad ITESO 获得了计算机系统工程的学士学位。



Marco Perez, 顾问软件开发人员, IBM France

Marco Perez 持有 UCLV 的工程学士学位和 McGill University 的理科硕士学位,是 IBM 全球信息科技服务部 (GTS) 的一名顾问软件开发人员。他在软件架构、设计和开发方面拥有超过 15 年的经验。Marco's 目前的工作重点是为 SmartCloud Application Services 和 SmartCloud Enterprise 项目进行平台即服务 (PaaS) 开发。



2013 年 2 月 18 日

IBM SmartCloud Enterprise 中的 Cloud Services Framework (CSF) 提供了一种管理服务的方法。服务是软件即服务 (SaaS)、平台即服务 (PaaS) 或托管在 SmartCloud 上的管理产品。用户可以从 SmartCloud 门户访问服务,服务提供了对相互依赖的资源进行部署和管理的一种手段,并协调 VM 实例的配置。

使用服务描述符可以对服务进行描述,服务描述符包含用来在 Cloud Service Framework 内自动化服务的若干个模型。在 SmartCloud Customizing Services Guide(请参阅 参考资料)中查找有关服务描述符的详细信息。

我们重用了在之前有关构建混搭服务的两部分的文章中提供的混搭示例。文章使用 JSONP 实现跨域通信(请参阅 参考资料)介绍了如何克服浏览器的同源策略限制,同时结合使用并显示来自第三方来源的数据,并运用使用了 jQuery 的 Yahoo! Query Language。

Cloud Services Framework

Cloud Services Framework (CSF) 提供了 SmartCloud 的生态系统,使企业客户、IBM 和独立软件供应商能够以更低的开发和管理成本提供预定义的和预集成的服务。CSF 是一个交付、开发、管理云上的服务并对服务进行计费的平台。独立软件供应商 (ISV) 可以在 Rational Asset Manager 中创建一个模板服务资产,然后使用 CSF API 注册服务产品,从而创建一个新的服务产品。客户的企业帐户内的用户可以立即对服务产品进行测试。当服务通过测试后,就可以推广服务并将它提供给其他客户。请参阅 Provider's Guide for Images, Services and Software Bundles(参阅 参考资料)。

服务是托管在 SmartCloud 上的一种管理产品,用户可以通过 SmartCloud 门户访问服务。

  • 可以在 Control Panel 中的 Service Instances 选项卡中的服务产品创建服务实例。
  • 服务产品必须有一个服务描述符。描述符是一个档案,其中包含服务的定义和服务资源。
  • 服务必须是已经在 SmartCloud Asset Catalog 中注册的产品,然后才可以向云消费者提供它。

您可以使用模型描述您的服务,以支持 SmartCloud 基础架构,并为潜在的自动化提供相应的服务描述符。服务并不一定要指定所有模型。

  • Information 模型是强制性的,并为服务提供身份识别信息,例如,短名称、描述、图形图标、服务提供者名称、联系人和服务类型。
  • Structural 模型确定资源。在此服务的配置过程中分配的任何资源均在这里指定,例如,实例、IP、键和存储资源。
  • Operational 模型确定了在服务实例的生命周期过程中执行的操作的工作流。在这里,需要指定用于配置、取消配置、详细信息与管理操作的 Java 脚本文件的名称。还需要提供一种后端配置模式,它可以根据从 Structural 模型获得的依赖关系,隐式地在后端执行配置和取消配置工作流。
  • Data 模型定义了输入参数和输出参数。
  • Licensing 模型允许您指定最终用户许可协议。
  • Cloud Concerns 模型为服务指定数据中心的可用性。

作为模拟给定服务产品的服务描述符的一部分,您可以通过编写客户端 JavaScript,配置或取消配置在服务实例所有者的浏览器会话中使用用户凭据执行的服务实例。ibmcloud.csf.Deployer 库提供了一个简单的 JavaScript API,支持组件资源的配置和取消配置,从而帮助开发基于浏览器对服务实例进行配置和取消配置的脚本。它还提供了一种以特定顺序执行操作的方法,即等待组件的配置或取消配置完成,然后再执行脚本的其余部分。当前版本的库支持键、IP 地址、卷和实例。

详细信息视图脚本用于更新详细信息的视图,该视图可能出现在服务实例网格下的门户网站上的任意内容,以及出现在 Getting Started 视图上的门户网站上的任意内容。

管理脚本使服务用户可以导航到合适的用户界面,并管理服务实例。

请参阅定制服务指南(请参阅 参考资料),了解有关服务描述符、模型、视图和部署库的更多信息。

Cloud Services Framework 允许创建实例的用户查看服务实例,并允许帐户中的管理员用户查看标准用户创建的服务实例。服务实例只能由创建它的用户进行管理。


创建和注册服务

要让服务产品出现在 SmartCloud Portal 上,需要执行两个步骤:

  1. 将服务模板资产导入 Rational Asset 目录
  2. 使用 REST API 注册资产

这两个步骤在图 1 中被显示为 Create 和 Register。

  1. 登录到 SmartCloud 并在 Control Panel 上单击 View Asset Catalog
    图 1. 云服务框架
    云服务框架
  2. 单击 Submit an Asset,如图 2 所示。
    图 2. 资产目录链接到 Submit an Asset
    资产目录链接到 Submit an Asset
  3. 输入信息,如图 3 所示。输入在 service.xml 中输入的名称和描述。对于 Type,请选中 Template Service。选择 MashupService.zip 文件并单击 Submit
    图 3. 使用 zip 文件创建一个模板服务资产
    使用 zip 文件创建一个模板服务资产
  4. 如图 4 所示,一个消息窗口显示了 "Submitting asset",并且已提取 zip 文件。
    图 4. 提交资产
    提交资产
  5. 服务名称的详细信息在显示时带有红色的 Required,如图 5 所示。再次单击 Submit
    图 5. 提交资产详细信息
    >提交资产详细信息
  6. 资产已保存。
    图 6. 资产已成功提交
    资产已成功提交

注册资产,使其在目录中作为一个服务提供。请注意 Unique ID={41572B49-77CD-9481-1C92-75C2A5339453}Version 1.0,它们在注册期间分别用作 RAMuuidRAMversion 的参数。

  1. 输入下面的命令,使用 curl 来调用 REST API。您也可以使用 RESTClient 插件。REST API 参考指南(请参见参考资料)中介绍了这个 API。替换您的用户名、密码,用冒号分隔它们,如下所示,并使用您的 RAMuuid
    curl -k -H 'Accept: application/json' -o /tmp/my.text -u "$userid:$password"
     -d RAMuuid="{41572B49-77CD-9481-1C92-75C2A5339453}"
     -d RAMversion="1.0" -X POST
     https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331/offerings/service
  2. 响应被存储在 /tmp/my.text 中。查看此文件。它显示了注册服务产品的详细信息。注意 ramArtifactId。您稍后可以使用该 ID 在 Rational Asset 目录中搜索该资产。在 Enterprise 社区中将可见性设置为 shared。注意,该服务的位置是 Ehningen, Germany。位置是在 service.xml 文件中指定的。
    {"serviceOfferings":[{"offeringType":"PaaS","thumbnailUrl":
    "artifact/{41572B49-77CD-9481-1C92-75C2A5339453}/1.0/cloud.png",
    "resourceOfferingIDs":[], "serviceLevels":["DEFAULT_SERVICE_LEVEL"],
    "ramArtifactVersion":"1.0", "name":"MashupService",
    "ramArtifactId":"{41572B49-77CD-9481-1C92-75C2A5339453}",
    "manifest": "https://www-147.ibm.com/cloud/enterprise/ram/artifact/
    {41572B49-77CD-9481-1C92-75C2A5339453}/1.0/META-INF/service.xml",
    "state":1,"provider":"IBM Corp.","supportedServiceTypes":
    [{"label":"DEFAULT_SERVICE_LEVEL","id":"DEFAULT_SERVICE_LEVEL"},
    "visibility":"SHARED","owner":"name":"karve@us.ibm.com",
    "id":"karve@us.ibm.com"},"communityName":"2230",
    "createdTime":1345049205440,"location":{"name":"EHN","id":"61"},
    "documentation":"https://www-147.ibm.com/cloud/enterprise/ram/artifact/
    {41572B49-77CD-9481-1C92-75C2A5339453}/1.0/GettingStarted.html",
    "id":"730","description":
    "Building a mashup service with JSONP, jQuery, and Yahoo! Query Language"}]}
  3. 当资产获得批准时,会发送一封电子邮件。
    图 7. 告知该资产获得批准的电子邮件消息
    告知该资产获得批准的电子邮件消息

添加一个服务实例

  1. 返回云门户。
  2. 单击 Control Panel 并选择 Service Instances 选项卡。
  3. 单击 Add Service Instance。对于 Type,选中 Shared。对于 Data Center,选中 Ehningen, Germany。在目录中选中 MashupService 并单击 Next
    图 8. 添加一个服务实例
    添加一个服务实例
  4. 输入服务实例的名称和描述,然后单击 Next
    图 9. 提供服务实例的名称和描述
    提供服务实例的名称和描述
  5. 输入参数并单击 Next。所显示的这些参数名称来自 service.xml 清单文件的服务参数部分。然后,当您渲染混搭的细节时,需要使用 REST API 来检索这些参数值。
    图 10. 提供服务实例的参数
    提供服务实例的参数
  6. 验证信息并单击 Next
    图 11. 验证输入
    验证输入
  7. 接受 Service Agreement 并单击 Submit。这会显示许可协议的详细信息。验证信息并单击 Next
    图 12. 接受许可协议
    接受许可协议
  8. 消息窗口显示 "Submitting",随后是确认已成功提交请求的一条消息。
    图 13. 服务实例请求已被提交
    服务实例请求已被提交

    在添加服务实例的过程中,已经利用 provision.js 完成了资源的创建。在这个混搭示例中,您没有任何资源。因此,函数 ibmcloud.csf.provision 只调用 Cloud Services Framework 所需要的回调。

  9. 返回 Service Instances 页面中的 Control panel。单击之前提供的 MyMashup 的名称。它显示为 "Loading Service details...",然后在详细信息面板中会显示 Stock Quotes、News Headlines 和 Weather 的信息。需要注意的是,在 Google Chrome 浏览器中,外部 URL 会遭到拦截。您必须单击 URL 旁边的盾牌图标,它显示 "This page has insecure content"。单击 Load anyway,并回到 MyMashup Service。现在,它就会显示相关内容。
    图 14. 服务实例的详细信息
    服务实例的详细信息
  10. 请注意,在 图 14 的详细信息中显示的 Service ID。在 details.js 文件中使用下面的代码行,并在最后调用回调 (true),可以设置 serviceConfig.id。
    serviceConfig.id = serviceId;

    此回调使得在渲染时,details.template 使用 serviceConfig.id 值。在模板中,所有地方的 ${serviceConfig.id} 均被替换为在 details.js 中设置的实际值。

    <h5 class="itemLabel">Service ID: </h5> <p>${serviceConfig.id}</p><br/>

    注意 ${serviceConfig.id} 如何用于标记名称;然后,在超时中,会在 manage.js 和 details.js 中使用它。

    该混搭在三个列中显示 Stock Quotes、News Headline 和 Weather。您可以通过更新 details.template 中的条目来移动列或重新安排信息。

  11. 根据所需的安排修改 details.template 的本地副本,并更新资产。要做到这一点,请回到 Rational Asset 目录,然后单击 My Dashboard
  12. 单击铅笔图标编辑 MashupService。您还可以使用在注册服务时返回的 ramArtifactId 来搜索资产。
    图 15. 在 Rational Asset Catalog 中选择资产
    在 Rational Asset Catalog 中选择资产
  13. 单击 Choose file 并选择中 details.template 文件。
    图 16. 更新资产
    更新资产
  14. 单击 Update
    图 17. 为更新添加注释
    为更新添加注释
  15. 添加注释并单击 Update
    图 18. 资产被更新
    资产被更新
  16. 消息窗口显示,资产正在更新。这会将 Rational Asset 中的 details.template 文件更新为新文件。单击 Return to Cloud portal 返回 Control panel。
  17. 选中 Service Instances 并单击 MyMashup。现在,此窗口显示了重新安排的信息。
    图 19. 服务实例的详细信息更新为新模板
    服务实例的详细信息更新为新模板

SmartCloud 使用 OAuth 对 REST API 进行身份认证。使用该机制可调用所有可用的 REST API。专门调用 /services/$serviceInstanceId/configuration API 来检索在配置服务实例时提供的邮政编码和股票符号的参数值。(我在 serviceInstanceId 前面添加了 $,表示在这里需要指定实际的 ID。)details.js 中的 getOAuthToken 函数调用了 /computecloud/enterprise/api/oauth20/authorize,它使用了响应位置标题中的散列来响应。在 Bearer 的请求 Authorization 标头中使用了这个散列令牌,以便提交 REST 请求来检索配置参数。此外,还向 Weather 小部件提供邮政编码,并向 Stock Quotes 小部件提供了符号,然后提交外部查询,解析响应,并更新服务实例的详细信息。

第四个小部件显示服务的详细信息,显示了如何提交多个 REST 请求。获得 OAuth 后,首先需要提交 REST 请求来获得服务实例的详细信息。检索 Service Offering ID,并发送另一个 REST 请求来检索 Service Offering 的详细信息。最后,提取并显示名称、描述、位置、ramArtifactId、ramArtifactVersion、清单链接和文档链接。在撰写本文时,REST API 返回的 Link to Documentation 总是指向 GettingStarted.html,而不是指向 service.xml 中引用的 getting-started.html。如果您希望正常使用该链接,请将 getting-started.html 复制为 GettingStarted.html,并将它添加到资产。

图 20. 服务产品详细信息
服务产品详细信息

在加载 details.template 文件后,需要渲染小部件的详细信息。因此,要将回调设置为 true,在 details.js 文件中设置一个超时,允许在渲染小部件之前先完成 details.template 文件的加载。在回调完成之前,小部件的 dojo.byId 无法正常工作。


管理服务实例

Manage Service Instance 按钮在混搭示例中用于更新详细信息。这允许动态更新 News headlines、Weather 和 Stock Quotes 的详细信息。manage.js 对 OAuth 和对外部 Web 站点的查询均执行了和 details.js 中相同的调用。然而,在 manage.js 中不需要使用超时,因为在单击 Manage Service Details 之前,details.template 已经被渲染。此外,服务详细信息预计不会获得更新,所以只会重新加载 News、Weather 和 Stock Quotes 小部件。

您可以使用 REST API 来检索服务实例的详细信息。为了检索所有服务实例,请提交以下请求:

curl -k -H 'Accept: application/json' -o /tmp/my.text -u "$userid:$password"
-X GET https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331/services

这将返回服务实例的完整列表。请注意 MyMashup 服务实例的 ID。在本例中,我们的 ID 是 3452。

{"services":[{"launchTime":1345133890836,"status":5,"owner":"karve@us.ibm.com",
"location":"61","serviceOffering":{"serviceOfferingType":"PaaS",
"serviceOfferingName":"MashupService","serviceOfferingID":"730",
"serviceOfferingProvider":"IBM Corp."},"name":"MyMashup","id":"3452",
"description":""},...]}

检索与此服务实例有关联的资源的更多详细信息:

curl -k -H 'Accept: application/json' -o /tmp/my.text -u "$userid:$password"
-X GET https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331/services/3452

在本例中,没有关联的资源,因此结果显示为空数组。

{"launchTime":1345133890836,"requestId":"3452","name":"MyMashup",
"serviceType":"DEFAULT_SERVICE_LEVEL           ","status":5,"owner":"karve@us.ibm.com",
"associatedIPAddresses":[],"location":"61","associatedKeys":[],"requestName":"MyMashup",
"id":"3452","serviceOffering":{"serviceOfferingType":"PaaS",
"serviceOfferingName":"MashupService","serviceOfferingID":"730",
"serviceOfferingProvider":"IBM Corp."},"description":"","instances":[],
"associatedStorages":[]}

删除服务实例

当您单击 Delete service instance 时,就会调用 deprovision.js。这是可以删除由服务创建或使用的任何资源的地方。对于该混搭示例,由于没有使用任何资源,所以函数 ibmcloud.csf.deprovision 只调用 Cloud Services Framework 所需要的回调。如果没有在 deprovision.js 中显式删除您的服务所创建的任何资源,例如任何虚拟机实例,那么将会在 Control panel 的 Instances 选项卡中看见它们,并且在删除服务实例后,可以删除它们。但是,最好是在 deprovision.js 中删除由服务实例分配的所有资源。


结束语

在本文中,我们简单介绍了一些模型,可使用它们在 SmartCloud 上的 Cloud Services Framework 中创建混搭服务。我们没有配置或取消配置任何资源,也没有保持服务状态。请关注本系列的后续文章,我们将介绍服务和覆盖方面的知识,还将通过负载均衡器服务和监控服务的示例说明代理 VM。服务组件的配置是通过服务提供商的服务脚本来完成的。从使用服务 shell 的那一刻起,也就是说,从创建数据库中的服务条目开始,云就会将服务视为活动的。出于计费目的,不允许服务提供商操纵相关状态。服务显示和云本身的集成对可以显示哪些内容强加了一些限制。具体而言,用户不应该操作服务列表下方的屏幕以外的区域。在下一篇文章中,我们会更详细地说明如何配置包含多个组件的服务。

参考资料

学习

获得产品和技术

讨论

  • 加入 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, Open source
ArticleID=858267
ArticleTitle=SmartCloud Cloud Services Framework,第 1 部分: 创建一个混搭服务
publish-date=02182013